yii2 правильная архитектура приложения (передача данных в макет)

мне нужно отправить данные с контроллеров в основной макет (что-то вроде уведомления о новых сообщениях в верхнем меню), мне это нужно во всех приложениях (глобальных)

я нашел один способ передать переменные в макет

Yii::$app->controller->myvar

от свойства класса до макета, но я думаю, что это не лучший способ дублировать код на все контроллеры, может быть, я предполагаю расширить базовый контроллер и установить мою логику здесь?

Скажите, пожалуйста, лучшую практику, чтобы делать то, что я хочу.

пс. TNX и извините за мой английский

0

Решение

В контроллере вы можете использовать

$this->view->params['name'] = 123

и в макете

<?= $this->params['name'] ?>
1

Другие решения

1) Вы можете использовать глобальные параметры приложения yii

Yii::$app->params['foo'] = 'bar'; // controller

а также

echo Yii::$app->params['foo']; // in view/layout/controllers/elsewhere

2) Вы можете использовать сессию. Создайте контроллер, который будет расширен другими, с этими 3 функциями:

<?php
namespace common\components;
use Yii;
use yii\web\Controller;

class BaseController extends Controller
{

/**
* Set user flash notice
* @param $message
* @return mixed
*/
public function setFlash($key, $message){
return Yii::$app->session->setFlash($key, $message);
}

/**
* Has user flash notice
* @param $message
* @return mixed
*/
public function hasFlash($key){
if(Yii::$app->session->hasFlash($key)) return True;
else return false;
}

/**
* Get user flash notice
* @param $message
* @return mixed
*/
public function getFlash($key){
return Yii::$app->session->getFlash($key);
}
}

теперь в ваших контроллерах

use common\components\BaseController;
...
class MyController extends BaseController
...
$this->setFlash('foo','bar'); // setting flash var

и в ваших взглядах

echo $this->context->getFlash('foo'); // getting flash var

или же

echo Yii::$app->controller->getFlash('foo'); // getting flash var
1

В следующей строке добавьте в config \ main.php

‘user’ => array (‘class’ => ‘WebUser’, // включить аутентификацию на основе файлов cookie ‘allowAutoLogin’ => true,),

После этого создайте новый файл в папке protected \ components \ WebUser.php, в этом файле WebUser.php.

класс WebUser расширяет CWebUser
{
личное $ _model;

function Update()
{
return $this->myvar='this is my variable';
}

}

Вы можете получить доступ к файлу макета следующим образом: echo Yii :: app () -> user-> update ();

0
По вопросам рекламы [email protected]