2013-03-15 25 views
10

ルートパラメータへのアクセスは、どちらの方が高速ですか?コントローラの引数としてsymfony2ルートパラメータの取得(コントローラ引数とリクエスト)

  1. 入れルートパラメータ
  2. 入手ルート$this->getRequest()->get('param')

からパラメータそして、何リクエストオブジェクトについてはどうですか?より良い方法はコントローラオブジェクトとして要求オブジェクトを置くか、コントローラオブジェクトにgetRequest()メソッドを呼び出すことですか?

答えて

15

Requestオブジェクトをコンテナから取り除く必要があるので、遅いアプローチですが、私は両方を行いましたが、その違いはごくわずかです。 Requestオブジェクトが必要なときは、コントローラーメソッドの引数として指定する方がよいでしょう。すぐにPHPタイプヒントが追加の情報(オートコンプリートなど)を適切なIDE(個人的にはPHPStormを推奨します)で提供するからです。これは他のコントローラメソッドの引数にも当てはまります。直線的な変数が与えられ、他の場所から2回引き出す必要はありません。

class SthController extends Controller 
    { 
    public function indexAction(Request $request, $arg1, $arg2) 
    { 
    // you have $request object with type hint and all goodness 
    } 
    } 
+0

Thx。どのようにコントローラから渡すパラメータが速いか、{{app.request.get( 'name')}} 'によってtwigテンプレートのパラメータを取得するのはどうでしょうか? – NHG

+0

パフォーマンスに関しては、同じルールが適用されます( 'app.request.get'は' $ container-> get( 'request') - > get( 'name') ')に直接変換されます。しかし、コーディングスタイルでは、すべての状況で利用できるわけではないので、 'app'変数に頼るべきではありません(ESI、テンプレートなどを試してみて、数ヶ月前と同じ位置で終了します) - 最高です方法は、レンダリングテンプレート要求の前に計算する必要があるすべてのデータを送信することです。 –

-2

もっと動的なので、getRequest()メソッドを使うべきだと思います!

+0

'getRequest()'は '$ this-> container-> get( 'request')'のショートカットに過ぎませんが、Requestオブジェクトをアクションパラメータから取得することは、おそらく望ましいDIアプローチです。 実際にコントローラをサービスとして使用する場合、 'getRequest()'メソッドはありません。 –

関連する問題