Специальный код шаблона блейда Laravel

В настоящее время мы используем инфраструктуру Laravel в нескольких проектах, но одна проблема, с которой мы продолжаем сталкиваться, и которая мне не нравится, это следующая проблема:

Допустим, у вас есть домашняя страница и страница контента.

HomepageController имеет весь php-код, специфичный для домашней страницы. ContentpageController имеет весь php-код, специфичный для контента.

у нас есть app.blade.php, который делает

@yield('page')

HomepageController вызывает представление homepage.blade.php, содержащее

@extends('app')

@section('page')
     Some HTML part
     @include('parts.top_5')
@endsection

ContentController вызывает представление content.blade.php, содержащее

@extends('app')

@section('page')
     Some different HTML part
     @include('parts.top_5')
@endsection

Здесь вы можете видеть, что обе страницы содержат parts.top_5, для вывода top5 нужны определенные переменные. Теперь проблема в том, что в настоящее время мы копируем код для переменных top5 в обоих контроллерах или в сгруппированном промежуточном программном обеспечении, но есть ли лучшее решение для создания некоторых переменных, специфичных для блейда, когда часть включена? Что-то вроде запуска функции контроллера при загрузке блейд-шаблона?

Я искал в Интернете, но не могу найти никого с таким же вопросом. Надеюсь, кто-то может помочь мне в этом умопомрачительном вопросе!


person RemcoDN    schedule 22.05.2015    source источник
comment
Я не так хорош с английским, но вы имеете в виду, что хотите передать данные в представление через @include, если да, попробуйте это @include('view.name', ['data' => 'yourdata'])?   -  person xenish    schedule 22.05.2015


Ответы (1)


Вы можете добавить эту привязку к AppServiceProvider

(или любой пользовательский ServiceProvider, который вы хотите)

так:

public function boot()
{
    $view->composer('parts.top_5', function($view) {
        $view->with('any_data' => 'You want');
    })
}

Таким образом, каждый раз, когда Laravel будет создавать parts.top_5 представление, этот метод закрытия будет активирован.

А в документации это здесь: http://laravel.com/docs/5.0/views#view-composers

person D. Cichowski    schedule 22.05.2015
comment
Просто погуглил, когда вы не разместили ссылку, но нашли ту же страницу, теперь я вижу, что Laraval добавил это в документацию v5.0, очень здорово попробовать это, кажется, это именно то, что мне нужно. - person RemcoDN; 22.05.2015