我需要从控制器发送数据到主布局(就像顶部菜单中新消息的通知),我需要在所有应用程序(全局)中使用它
我找到了一种将变量传递给布局的方法
Yii::$app->controller->myvar从类属性到布局,但我认为将代码复制到所有控制器不是最好的方法,也许我应该扩展基本控制器并在这里设置我的逻辑?
请告诉我做我想做的事情的最佳实践。
ps。Tnx,抱歉我的英语
发布于 2015-02-03 18:57:56
在控制器中,您可以使用
$this->view->params['name'] = 123在布局中
<?= $this->params['name'] ?>发布于 2016-03-15 19:02:08
1)可以使用yii全局app参数
Yii::$app->params['foo'] = 'bar'; // controller和
echo Yii::$app->params['foo']; // in view/layout/controllers/elsewhere2)可以使用session。创建一个控制器,该控制器将由其他人扩展,具有以下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发布于 2015-02-03 19:04:58
下面这行代码添加了config\main.php
‘'user'=>array( 'class'=>'WebUser',//启用基于cookie的身份验证'allowAutoLogin'=>true,),
在此WebUser.php文件中,在protected\components\WebUser.php中创建新文件
类WebUser扩展了CWebUser {私有$_model;
function Update()
{
return $this->myvar='this is my variable';
}}
你可以像下面这样在布局文件中访问: Yii::app()->user->update();
https://stackoverflow.com/questions/28297047
复制相似问题