2013-03-15 7 views
10

Welcher Zugriff auf Routenparameter ist schneller?symfony2 Routenparameter abrufen (Controller Argumente vs Anfrage)

  1. Put Route Parameter als Controller Argumente
  2. Route Erste Parameter von $this->getRequest()->get('param')

Und was Request-Objekt? Bessere Möglichkeit ist Anfrage Objekt als Controller-Parameter oder getRequest() Methode auf Controller-Objekt aufrufen?

Antwort

15

Man könnte argumentieren, dass, da Sie Request Objekt aus Container ziehen müssen, es ist langsamer Ansatz, aber ich habe beides getan und Unterschied ist vernachlässigbar. Wenn Sie Request Objekt benötigen, ist es besser, es als das Argument der Controller-Methode zu setzen, weil Sie es sofort haben und PHP Type Hinting wird zusätzliche Informationen (Autocomplete usw.) in anständigen IDEs zur Verfügung stellen (ich persönlich empfehle PHPStorm). Dies gilt auch für andere Controller-Methodenargumente. Sie erhalten gerade Variablen, die Sie nicht zweimal von anderen Stellen ziehen müssen.

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

Thx. Und was ist mit der Übergabe von Parametern von Controller zu Zweig Vorlage - welcher Weg ist schneller Parameter vom Controller übergeben, oder erhalten Parameter in Zweig Vorlage von '{{app.request.get ('Name')}}'? – NHG

+0

Für die Performance gelten die gleichen Regeln ('app.request.get' übersetzt sich direkt in etwas wie' $ container-> get ('request') -> get ('name') '). Aber für den Codierungsstil sollten Sie sich nicht auf die 'app'-Variable verlassen, da sie nicht in allen Situationen verfügbar ist (versuchen Sie ESI, Template Includes oder so zu testen und Sie werden in derselben Position enden wie vor Monaten) - das Beste So können Sie alle Daten senden, die Sie vor der Renderschablonenanforderung berechnet haben. –

-2

Ich denke, Sie sollten getRequest() -Methode verwenden, weil es dynamischer ist!

+0

'getRequest()' ist nur eine Abkürzung für '$ this-> container-> get ('request')', aber Request-Objekt von Aktionsparametern ist DI-Ansatz, der wahrscheinlich bevorzugt werden sollte. Tatsächlich gibt es keine 'getRequest()' Methode, wenn Sie den Controller als Dienst verwenden. –

Verwandte Themen