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