2013-08-19 8 views
6

In Bezug auf die Frage Passing default variables to view unter allen verfügbaren Ansichten Variablen übergibt, gibt es einen technischen oder funktionalen Unterschied zwischen der Verwendung von View::composer():Laravel: Unterschied zwischen Ansicht :: Aktie() und Ansicht :: Komponist()

View::composer('*', function($view) { 
    $thundercats = 'Woooooohh!!'; 
    $view->with('thundercats', $thundercats); 
}) 

in der filters.php Datei oder die Verwendung von View::share() in der BaseController.php Datei:

public function __construct { 
    $thundercats = 'Woooooohh!!'; 
    View::share('thundercats', $thundercats); 
} 

ich habe ly vor kurzem erfuhr, über View::share() und es außerordentlich fesselnde finden, obwohl ich bereits die früheren in einem anderen Projekt verwendet hat begonnen.

Edit:

Meine erste Vermutung ist, dass erstere eine Datei (filters.php), während die letztere eine Klasse (BaseController.php) ist. In diesem Sinne denke ich, eine Klasse ist viel besser? Obwohl, ich bin nicht ganz sicher, warum zu diesem Zeitpunkt. :)

Antwort

13

Technisch sie gleich überhaupt nicht sind. View::share setzt einfach eine Variable, während View::composer eine Callback-Funktion ist.

mir näher erläutern lassen:

View::share wirklich gerade nach vorne ist es eine Variable setzt, die in jeder der Ansichten verwendet werden können, denken Sie daran, wie eine globale Variable.

View::composer registriert ein Ereignis, das aufgerufen wird, wenn die Ansicht gerendert wird, nicht zu verwechseln mit einem View::creator, die ausgelöst wird, wenn eine Ansicht instanziiert wird.

View::composer/View::creator können beide als eine Klasse verwendet werden, die well documented ist.

Während diese geben Ihnen die Möglichkeit, einen Blick zusätzliche Daten zu übergeben, sie geben auch zu Fähigkeit, eine Menge anderer Dinge zu tun, zum Beispiel sie konnten:

  • Aid in einer Ansicht Debuggen
  • Log Informationen zu Ansichten
  • verwendet werden, um benutzerdefinierte Caching (wahrscheinlich nicht eine gute Idee, aber möglich)

Dies sind nur einige Beispiele dafür, was konnte zu schaffen möglich sein mit View::composer und View::creator.

+0

Ich verstehe. Zur Vereinfachung, wenn Sie nur eine 'globale' Variable ausgeben wollen, ist es besser 'View :: share()' zu verwenden. Für alles andere/mehr verwenden Sie 'View :: composer()'. – enchance

+1

Der Einfachheit halber sicher, aber wenn Sie es immer und immer wieder definieren finden, abstrahieren Sie es wahrscheinlich zu einem 'View :: composer'. – tplaner

+0

Überprüfen Sie auch diese Antwort http://StackOverflow.com/a/23857517/682754. Beides hat mir wirklich geholfen, den Unterschied zu verstehen. – Carlton

0
View::composer('*', callback()); 

Bedeutet, dass der Rückruf für alle Ansichten (*) aufgerufen wird.

View::share 

Bedeutet, dass eine Variable mit allen outputed Ansichten geteilt wird.

Da die erste in filters.php ist, wird es für alle Strecken gelten.

Die zweite ist in einem Controller contructor, so dass es für alle Ansichten von dieser Steuerung ausgelöst gelten werden.

Eine letzte Sache: Wenn ein Konstruktor überschreiben, es ist ein guter pratice den übergeordneten Konstruktor mit diesem Code rufen allways:

parent::_construct(); 
+0

Ich sehe. so 'Views :: composer' Variablen können auch in _routes.php_ und jeder anderen Datei zugegriffen werden? Aus Neugier, kann dies getan werden, um eine spezifische Variable für alle ** Controller ** außer "$ this-> varname" verfügbar zu machen? – enchance

+0

Wenn View :: Composer ('*', Callback()) eine gültige Option ist, sollte es in der Dokumentation sein. –

Verwandte Themen