Передача данных в layout

Чтобы передать данные в layout можно использовать несколько подходов:

  • Использование виджетов. Часть layout можно вынести в виджет с необходимой логикой
  • Прямая передача данных через params
  • Передача через публичные свойства контроллера

Рассмотрим каждый из вариантов по отдельности.

Использование виджетов

Несмотря на то, что идут споры по поводу правильности применения виджетов в структуре MVC, для yii2 наиболее обосновано использование виджетов (а данном случае они выступают в виде своего рода сервиса Twig_Extension в Symfony). Виджет имеет свою логику и генерирует свой view и, следовательно, при их использовании отпадает необходимость прямой передачи данных в шаблон.

Прямая передача данных через params

В view-файле можно использовать структуру вида

Yii::$app->params['variable'] = 'value';

Тогда в шаблоне аналогичный вызов выдаст необходимую переменную:

<?= isset(Yii::$app->params['variable']) ? Yii::$app->params['variable'] : '' ?>

Передача через публичные свойства контроллера

В контроллере необходимо завести public свойство:

class DefaultController extends Controller
{
    public $variable = '';
    ...

и в нужном экшене задать значение

$this->variable = 'my_var';

тогда, вызов значения свойства в layout примет вид

<?= $this->context->variable ?>
{{ message }}

{{ 'Comments are closed.' | trans }}