Этой цели можно достичь разными способами,
1. Использование BaseController
Как мне нравится, я создаю BaseController
класс, расширяющий собственный Laravel Controller
, и настраиваю там различные глобальные вещи. Все остальные контроллеры затем расширяются, BaseController
а не из контроллера 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. Использование фильтра
Если вы точно знаете, что хотите, чтобы что-то было настроено для представлений по каждому запросу во всем приложении, вы также можете сделать это с помощью фильтра, который запускается перед запросом - именно так я работаю с объектом User в Laravel.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
ИЛИ
Вы можете определить свой собственный фильтр
Route::filter('user-filter', function() {
View::share('user', User::all());
});
и вызвать его через простой вызов фильтра.
Обновление согласно версии 5. *
3. Использование промежуточного программного обеспечения
Используя View::share
сmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. Использование View Composer
View Composer также помогает привязать определенные данные для просмотра разными способами. Вы можете напрямую привязать переменную к определенному представлению или ко всем представлениям. Например, вы можете создать свой собственный каталог для хранения файла композитора представления в соответствии с требованиями. и эти файлы композитора представления через Службу обеспечивают взаимодействие с представлением.
Метод View composer может использоваться по-разному. Первый пример может выглядеть одинаково:
Вы можете создать App\Http\ViewComposers
каталог.
Поставщик услуг
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
После этого добавьте этого провайдера в config / app.php в разделе «провайдеры».
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}}
Этот метод может помочь только для определенного вида. Но если вы хотите запускать ViewComposer для всех представлений, мы должны применить это единственное изменение к ServiceProvider.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Ссылка
Документация Laravel
Для дальнейшего разъяснения Эпизод Laracast
Если с моей стороны все еще что-то неясно, дайте мне знать.