Передача переменной вида включенному шаблону макета в Laravel 8

#laravel #include #laravel-blade #partials

#laravel #включить #laravel-blade #частичные

Вопрос:

Это, вероятно, что-то простое, но это заставляет меня задуматься.

Итак, мой шаблон блейда макета имеет следующее:

 @include('layouts.partials.sidebar')
  
  {{ $slot }}
  
  @include('layouts.partials.footer')
  @include('layouts.partials.scripts')
 

Я создаю представление, которое загружает шаблон. Я предполагаю, что это анализируется в $slot.

 return view('request', [
  'boo' => 'Hoo'
]);
 

Никаких проблем, страница загружается, и переменная ‘boo’ доступна как {{ $ boo }} в шаблоне ‘requests’.

Но мой вопрос в том, как я могу передать переменную ‘boo’ во включенный файл в файле макета? В этом случае следующее:

 @include('layouts.partials.scripts')
 

Итак, в ‘layouts.partials.scripts’ как я могу получить доступ к {{ $ boo }}? На данный момент я просто получаю неопределенную ошибку индекса.

Большое вам спасибо за помощь.

Ответ №1:

 @include('layouts.partials.scripts', ['boo' => 'Hoo'])
 

Документы Laravel: https://laravel.com/docs/8.x/blade#including-subviews

Если у вас есть частичная навигация, или заголовок, или боковая панель, которая является частью основного макета, из которого вы создаете другие представления, и для этого требуются некоторые данные, которые не меняются от одного представления к другому, например, ссылки навигации.

Тогда вместо передачи данных из каждого метода контроллера вы можете определить view composer в методе service provider — boot ()

 //Service Provider's boot method
public function boot()
{
    View::composer('layouts.partials.sidebar', function ($view) {
    
        //$links = get the data for links

        return $view->with('links', $links);
    });
}
 

Laravel dos: https://laravel.com/docs/master/views#view-composers