РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
63 of 1392 menu

Метод composer

Метод composer класса View позволяет привязать данные к представлению, которые будут доступны всегда при его отображении. Первым параметром передаётся имя представления или массив представлений, вторым - замыкание или имя класса композера. Замыкание получает экземпляр представления, через который можно передать данные.

Синтаксис

<?php view()->composer($view, $callback); ?>

Пример

Давайте зарегистрируем композер для представления 'profile' в сервис-провайдере:

<?php namespace AppProviders; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { public function boot(): void { View::composer('profile', function ($view) { $user = auth()->user(); $view->with('user', $user); }); } } ?>

Теперь в представлении 'profile' будет доступна переменная 'user':

<p> Welcome, {{ $user->name }} </p>

Пример

Давайте привяжем композер к нескольким представлениям сразу:

<?php namespace AppProviders; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { public function boot(): void { View::composer(['profile', 'dashboard'], function ($view) { $user = auth()->user(); $view->with('user', $user); }); } } ?>

Пример

Давайте используем класс композера для более сложной логики:

<?php namespace AppHttpViewComposers; use Illuminate\View\View; use AppModels\User; class ProfileComposer { public function compose(View $view): void { $user = auth()->user(); $posts = $user->posts()->latest()->get(); $view->with('user', $user) ->with('posts', $posts); } } ?>

Регистрация класса в сервис-провайдере:

<?php namespace AppProviders; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; use AppHttpViewComposersProfileComposer; class AppServiceProvider extends ServiceProvider { public function boot(): void { View::composer('profile', ProfileComposer::class); } } ?>

Результат в представлении:

<h1>Welcome, {{ $user->name }}</h1> <ul> @foreach ($posts as $post) <li>{{ $post->title }}</li> @endforeach </ul>

Пример

Давайте зарегистрируем композер для всех представлений в папке 'admin':

<?php namespace AppProviders; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { public function boot(): void { View::composer('admin.*', function ($view) { $notifications = auth()->user()->unreadNotifications; $view->with('notifications', $notifications); }); } } ?>

Смотрите также

  • метод share,
    который делает данные глобально доступными для всех представлений
  • метод creator,
    который привязывает данные при создании представления
  • директива @include,
    которая подключает подпредставление
  • директива @section,
    которая определяет секцию в шаблоне
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить