Chcę, aby niektóre domyślne dane były dostępne we wszystkich widokach w mojej aplikacji Laravel 5.
Próbowałem go wyszukać, ale znalazłem tylko wyniki dla Laravel 4. Przeczytałem tutaj dokumentację „Udostępnianie danych ze wszystkimi widokami” , ale nie rozumiem, co robić. Gdzie należy umieścić poniższy kod?
View::share('data', [1, 2, 3]);
Dzięki za pomoc.
*
z kompozytorów w widoku, zwłaszcza jeśli używasz zapytań db, ponieważ jest on uruchamiany dla każdego dołączonego widoku podrzędnego, komponentu itp., Abyś mógł uruchomić setki niepotrzebnych zapytań, najlepiej jest użyć widoku podstawowego, np. Układów. app, a następnie w razie potrzeby przekaż dane.Odpowiedzi:
Cel ten można osiągnąć różnymi metodami,
1. Korzystanie z BaseController
Sposób, w jaki lubię to konfigurować,
BaseController
tworzę klasę, która rozszerza klasę LaravelaController
i konfiguruję tam różne globalne rzeczy. Wszystkie inne kontrolery następnie pochodzą z kontroleraBaseController
zamiast Laravel.2. Korzystanie z filtra
Jeśli wiesz na pewno, że chcesz coś ustawiać dla widoków na każde żądanie w całej aplikacji, możesz to również zrobić za pomocą filtru, który działa przed żądaniem - tak mam do czynienia z obiektem User w Laravel.
LUB
Możesz zdefiniować własny filtr
i wywołaj to za pomocą prostego wywołania filtra.
Aktualizacja zgodnie z wersją 5. *
3. Korzystanie z oprogramowania pośredniego
Korzystanie z
View::share
withmiddleware
4. Korzystanie z programu View Composer
View Composer pomaga również w wiązaniu określonych danych do wyświetlania na różne sposoby. Możesz bezpośrednio powiązać zmienną z określonym widokiem lub wszystkimi widokami. Na przykład możesz utworzyć własny katalog do przechowywania pliku kompozytora widoku zgodnie z wymaganiami. a te widok pliku kompozytora za pośrednictwem usługi zapewniają interakcję z widokiem.
Zobacz metodę kompozytora można użyć w inny sposób, pierwszy przykład może wyglądać podobnie:
Możesz stworzyć
App\Http\ViewComposers
katalog.Dostawca usługi
Następnie dodaj tego dostawcę do config / app.php w sekcji „dostawcy”.
TestViewComposer
ViewName.blade.php
Ta metoda może pomóc tylko w przypadku określonego widoku. Ale jeśli chcesz wyzwolić ViewComposer do wszystkich widoków, musimy zastosować tę pojedynczą zmianę do ServiceProvider.
Odniesienie
Dokumentacja Laravel
Dalsze wyjaśnienia - odcinek Laracast
Jeśli nadal coś jest niejasne z mojej strony, daj mi znać.
źródło
register()
metody - nie jest opcjonalna*
. Jeśli nie używasz,*
wszystko powinno być w porządku.Możesz utworzyć własnego usługodawcę (
ViewServiceProvider
nazwa jest powszechna) lub skorzystać z istniejącegoAppServiceProvider
.W wybranym dostawcy umieść kod w metodzie rozruchu.
Dzięki temu
$data
zmienna będzie dostępna we wszystkich widokach.Jeśli wolisz używać elewacji zamiast pomocnika, zmień
view()->
ją,View::
ale nie zapomnij umieścić jejuse View;
na początku pliku.źródło
AppServiceProvider
jest w porządku, ale jeśli masz coś więcej, powinieneś rozważyć utworzenie nowego dostawcy.composer update
również nie działa. Właściwie to wcale nie odpalaboot()
. Muszę udostępnić dwie zmienne.Okazało się, że jest to najłatwiejsze. Utwórz nowego dostawcę i
'*'
użyj symbolu wieloznacznego, aby dołączyć go do wszystkich widoków. Działa również w 5.3 :-)źródło
Najlepszym sposobem byłoby udostępnienie zmiennej za pomocą
View::share('var', $value);
Problemy z komponowaniem przy użyciu
"*"
:Rozważ następujące podejście:
Z przykładowego widoku ostrza:
Co się dzieje?
GlobalComposer
Klasy jest tworzony 1000 razy użyciuApp::make
.composing:some_partial_view_to_display_i
jest obsługiwane 1000 razy.compose
Funkcji wewnątrzGlobalComposer
klasy nazywa się 1000 razy.Ale widok częściowy
some_partial_view_to_display_i
nie ma nic wspólnego ze zmiennymi składającymi się z,GlobalComposer
ale znacznie wydłuża czas renderowania.Najlepsze podejście?
Korzystanie
View::share
z zgrupowanego oprogramowania pośredniego.Aktualizacja
Jeśli używasz czegoś, co jest obliczane za pośrednictwem potoku oprogramowania pośredniego, możesz po prostu nasłuchiwać odpowiedniego zdarzenia lub umieścić oprogramowanie pośredniczące udziału widoku na ostatnim dole potoku.
źródło
W dokumentacji:
Zgadzam się z Marwellnem, po prostu wstaw to w
AppServiceProvider
funkcji rozruchu:Zalecam użycie określonej nazwy zmiennej, aby uniknąć nieporozumień lub błędów z innymi zmiennymi nie „globalnymi”.
źródło
Dokumentację słychać https://laravel.com/docs/5.4/views#view-composers, ale ja ją rozbiję
Poszukaj katalogu app \ Providers w katalogu głównym swojej aplikacji i utwórz plik ComposerServiceProvider.php, a następnie skopiuj i wklej poniższy tekst do niego i zapisz go.
Z katalogu głównego aplikacji otwórz plik Config / app.php i poszukaj sekcji Providers w pliku, a następnie skopiuj i wklej to „App \ Providers \ ComposerServiceProvider” do tablicy.
W ten sposób stworzyliśmy dostawcę usług Composer. Po uruchomieniu aplikacji z widokiem Profil, takim jak http: // twoja_domena / coś / profil , wywoływany jest dostawca usług ComposerServiceProvider, a instancja klasy App \ Http \ ViewComposers \ ProfileComposer jest wywoływana metodą Composer ze względu na poniższy kod w metoda lub funkcja rozruchu.
Przejdź do ścieżki katalogu app / Http
Utwórz katalog o nazwie ViewComposers
Utwórz plik ProfileComposer.php .
Teraz przejdź do swojego widoku lub w tym przypadku Profile.blade.php i dodaj
i to pokaże liczbę użytkowników na stronie profilu.
Aby wyświetlić liczbę na wszystkich stronach, zmień
Do
źródło
Myślę, że najlepszym sposobem jest
View Composers
. Jeśli ktoś tu przyszedł i chce się dowiedzieć, jak to zrobić za pomocą View Composers, przeczytaj moją odpowiedź => Jak udostępnić zmienną we wszystkich widokach?źródło
Dokumentacja jest tutaj https://laravel.com/docs/5.4/views#view-composers, ale ja ją podzielę 1. Poszukaj dostawców katalogów w katalogu głównym i utwórz dla ComposerServiceProvider.php z zawartością
źródło
Wewnątrz folderu konfiguracyjnego możesz utworzyć plik php, nazwij go na przykład „zmienna.php” z zawartością poniżej:
Teraz we wszystkich widokach możesz to wykorzystać
źródło
1) W (app \ Providers \ AppServiceProvider.php)
2) w Twoim modelu użytkownika
3) w Twojej opinii
źródło
Metoda Laravel 5.6: https://laravel.com/docs/5.6/views#passing-data-to-views
Przykład z udostępnieniem kolekcji modeli wszystkim widokom (AppServiceProvider.php):
źródło
Masz dwie możliwości:
1. udostępnij za pomocą funkcji rozruchu w App \ Providers \ AppServiceProvider
public function boot() { view()->share('key', 'value'); }
I uzyskaj dostęp do zmiennej $ key w dowolnym pliku widoku.
Uwaga: pamiętaj, że nie możesz tutaj uzyskać dostępu do danych bieżącej sesji, uwierzytelnienia i trasy. Ta opcja jest dobra tylko wtedy, gdy chcesz udostępniać dane statyczne. Załóżmy, że chcesz udostępnić pewne dane na podstawie bieżącego użytkownika, trasy lub dowolnej niestandardowej zmiennej sesji, której nie będziesz w stanie z tym zrobić.
'aliases' => [ ..., 'Helper' => App\HelperClass\Helper::class, ],
i utwórz plik Helper.php w folderze HelperClass w folderze aplikacji
i uzyskaj do niego dostęp w dowolnym miejscu
Helper::Sample()
Nie będziesz tutaj ograniczony do korzystania z Auth, Route, Session ani żadnych innych klas.
źródło