мне нужно отправить данные с контроллеров в основной макет (что-то вроде уведомления о новых сообщениях в верхнем меню), мне это нужно во всех приложениях (глобальных)
я нашел один способ передать переменные в макет
Yii::$app->controller->myvar
от свойства класса до макета, но я думаю, что это не лучший способ дублировать код на все контроллеры, может быть, я предполагаю расширить базовый контроллер и установить мою логику здесь?
Скажите, пожалуйста, лучшую практику, чтобы делать то, что я хочу.
пс. TNX и извините за мой английский
В контроллере вы можете использовать
$this->view->params['name'] = 123
и в макете
<?= $this->params['name'] ?>
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
В следующей строке добавьте в config \ main.php
После этого создайте новый файл в папке protected \ components \ WebUser.php, в этом файле WebUser.php.
класс WebUser расширяет CWebUser
{
личное $ _model;
function Update()
{
return $this->myvar='this is my variable';
}
}
Вы можете получить доступ к файлу макета следующим образом: echo Yii :: app () -> user-> update ();