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ę Laravela Controller
i konfiguruję tam różne globalne rzeczy. Wszystkie inne kontrolery następnie pochodzą z kontrolera BaseController
zamiast Laravel.
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
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.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
LUB
Możesz zdefiniować własny filtr
Route::filter('user-filter', function() {
View::share('user', User::all());
});
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
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
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
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
Następnie dodaj tego dostawcę do config / app.php w sekcji „dostawcy”.
TestViewComposer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
ViewName.blade.php
Here you are... {{$ViewComposerTestVariable}}
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.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Odniesienie
Dokumentacja Laravel
Dalsze wyjaśnienia - odcinek Laracast
Jeśli nadal coś jest niejasne z mojej strony, daj mi znać.