我需要将数据从控制器发送到主要布局(类似于顶层菜单中新消息的通知符)我需要在所有应用程序中使用它(全局)
我找到了一种将变量传递给布局的方法
Yii::$app->controller->myvar
从类属性到布局,但我认为这不是将代码复制到所有控制器的最佳方法,也许我想扩展基本控制器并在此设置我的逻辑?
请告诉我最好的做法,做我想做的事。
PS。 Tnx抱歉我的英文
答案 0 :(得分:1)
在控制器中,您可以使用
$this->view->params['name'] = 123
并在布局中
<?= $this->params['name'] ?>
答案 1 :(得分:1)
1)您可以使用yii global app params
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
答案 2 :(得分:0)
以下行添加config \ main.php
之后在protected \ components \ WebUser.php中创建新文件,在此WebUser.php文件中
类WebUser扩展了CWebUser { private $ _model;
function Update()
{
return $this->myvar='this is my variable';
}
}
您可以在布局文件中访问,例如echo Yii :: app() - &gt; user-&gt; update();