2013-08-19 13 views
6

W odniesieniu do kwestii Passing default variables to view, aby przekazać zmienne wśród wszystkich dostępnych widoków, czy istnieje różnica techniczne lub funkcjonalne pomiędzy stosowaniem View::composer():laravel: Różnica między widokiem :: akcji() i zobacz :: kompozytor()

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

w pliku filters.php lub wykorzystanie View::share() w BaseController.php pliku:

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

mam na Ostatnio dowiedziałem się o View::share() i odkryłem, że jest wyjątkowo intrygujące, chociaż już zacząłem używać tego pierwszego w innym projekcie.

Edit:

Moje pierwsze założenie, że ta pierwsza jest plik (filters.php), podczas gdy ten ostatni jest klasą (BaseController.php). Mając to na uwadze, zgaduję, że klasa jest znacznie lepsza? Chociaż nie jestem do końca pewien, dlaczego w tym momencie. :)

Odpowiedz

13

Technicznie nie są one w ogóle podobni. View::share po prostu ustawia zmienną, a View::composer jest funkcją zwrotną.

Pozwól mi wyjaśnić w sposób bardziej szczegółowy:

View::share jest naprawdę prosta ustawia zmienną, która może być użyta w żadnym z widoków, pomyśl o tym jak zmienną globalną.

View::composer rejestruje zdarzenie, które jest wywoływane podczas renderowania widoku, nie myl go z View::creator, które jest wywoływane podczas tworzenia instancji widoku.

View::composer/View::creator może być używana jako klasa, która jest well documented.

Podczas nich daje możliwość przekazywania dodatkowych danych do widzenia, ale także daje zdolność zrobić wiele innych rzeczy, na przykład mogli:

  • debuggowanie widok
  • Log informacji o widokach
  • być wykorzystywane do tworzenia niestandardowego buforowania (prawdopodobnie nie jest to świetny pomysł, ale jest to możliwe)

to tylko kilka przykładów tego, co może być możliwe przy użyciu View::composer i View::creator.

+0

Rozumiem. Tak więc dla uproszczenia, jeśli wszystko, co chcesz, to wyprowadzenie zmiennej "globalnej", to lepiej użyć 'View :: share()'. Dla czegokolwiek innego/więcej, użyj 'View :: composer()'. – enchance

+1

Ze względu na prostotę, ale jeśli definiuję to w kółko, prawdopodobnie zanios to do 'View :: composer'. – tplaner

+0

Sprawdź również tę odpowiedź http://stackoverflow.com/a/23857517/682754. Obaj naprawdę pomogli mi zrozumieć różnicę. – Carlton

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

Oznacza, że ​​wywołanie zwrotne zostanie wywołane dla wszystkich widoków (*).

View::share 

Oznacza, że ​​zmienna zostanie udostępniona wszystkim widokom wyjściowym.

Ponieważ pierwsza jest w filters.php, będzie obowiązywać dla wszystkich tras.

Druga znajduje się w kontrkurze kontrolera, więc będzie obowiązywać dla wszystkich widoków uruchomionych przez ten kontroler.

Ostatnia sprawa: kiedy przesłanianie konstruktora, jest to dobry zarażenia się wirusem HIV do allways wywołać konstruktor rodzica z tym kodem:

parent::_construct(); 
+0

Rozumiem. więc zmienne 'Views :: composer' mogą być dostępne nawet w _routes.php_ i dowolnym innym pliku? Z ciekawości, czy można to zrobić, aby konkretna zmienna była dostępna dla wszystkich ** kontrolerów ** innych niż '$ this-> nazwa_zmienki'? – enchance

+0

Jeśli View :: composer ('*', callback()) jest poprawną opcją, powinien znajdować się w dokumentacji. –

Powiązane problemy