Публикации - Шаблонизатор blade

View Composer

Композеры (view composers) - функции-замыкания или методы класса, которые вызываются, когда шаблон рендерится в строку. Если имеются данные, которые необходимо привязать к шаблону при каждом его рендеринге, то композеры помогут вам выделить такую логику в отдельное место.

Регистрировать композеры можно внутри сервис-провайдера. Мы будем использовать фасад View для того, чтобы получить доступ к имплементации контракта Illuminate\Contracts\View\Factory:

 Определение композера. Листинг 3.1

<?php namespace App\Providers;
use View;
use Illuminate\Support\ServiceProvider;
use App\Http\ViewComposers\SiteComposer;
class ComposerServiceProvider extends ServiceProvider {
    public function boot()
    {
        View::composer('*', 'App\Http\ViewComposers\SiteComposer');
    }
    public function register()
    {
        //
    }
}

Файл композера необходимо зарегистрировать в config/app.php

Регистрация файла композера. Листинг 3.2

'App\Providers\ComposerServiceProvider',

Определение класса SiteComposer:

Класс SiteComposer. Листинг 3.3

<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class SiteComposer
{
  public function compose(View $view)
  {
    $view->with('menu_items',’TEST’);
  }
}

Метод compose должен получать в качестве аргумента инстанс Illuminate\Contracts\View\View. Для передачи переменных в шаблон используйте метод with().

Назначение композера для нескольких шаблонов

Вместо имени шаблона можно использовать массив имен.

Назначение композера для нескольких шаблонов. Листинг 3.4

View::composer(['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer');

Композер для всех шаблонов

А вот так можно назначить композер для всех шаблонов:

Назначение композера для всех шаблонов. Листинг 3.5

View::composer('*', function()
{
    //
});

Регистрация нескольких шаблонов

Можно использовать метод composers, чтобы зарегистрировать несколько композеров одновременно:

Регистрация нескольких шаблонов одновременно. Листинг 3.5

View::composers([
    'App\Http\ViewComposers\AdminComposer' =>
['admin.index', 'admin.profile'],
    'App\Http\ViewComposers\UserComposer' => 'user',
'App\Http\ViewComposers\ProductComposer' => 'product'
]);

 

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться