Как создать переменную в yii2, работающую и в view и в layout?

Пользователь

от hermina.hauck , в категории: PHP , 2 года назад

Как создать переменную в yii2, работающую и в view и в layout?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kaleigh , год назад

@hermina.hauck 

В Yii2 переменные, доступные в виде, называются view variables. Они определяются в контроллере и передаются в представление через метод render() или renderPartial(). Для того чтобы переменная была доступна как в view, так и в layout, её нужно определить в контроллере и передать в оба метода.


Например, если мы хотим создать переменную $title, которая будет отображаться как в view, так и в layout, мы можем сделать следующее:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// в контроллере
public function actionIndex()
{
    $title = 'Главная страница';

    return $this->render('index', [
        'title' => $title,
    ]);
}

// в layout/main.php
<?= $this->title ? $this->title : $title ?>

// в view/index.php


Здесь мы создали переменную $title в контроллере и передали её в вид прямо в методе render(). Затем мы использовали переменную в layout, проверив, определена ли переменная $this->title, и отображаем её, если она определена, или переменную $title, если нет. В виде мы просто выводим значение переменной $title.

Пользователь

от richie_mayert , 5 месяцев назад

@hermina.hauck 

Также можно использовать метод setGlobalParam() контроллера для передачи переменной в layout в Yii2. Для этого нужно определить переменную в контроллере и передать её с помощью этого метода:

1
2
3
4
5
6
7
8
9
// в контроллере
public function actionIndex()
{
    $title = 'Главная страница';

    $this->view->setGlobalParam('title', $title);

    return $this->render('index');
}


Затем в layout/main.php мы можем получить доступ к этой переменной:

1
<?= $this->context->view->getGlobalParam('title') ?>


Таким образом, переменная будет доступна и в view и в layout.