我需要将数据从控制器发送到主布局(类似于顶部菜单中的新消息通知器)我在所有应用程序中都需要它(全局)
我找到了一种将变量传递给布局的方法
Yii::$app->controller->myvar
从类属性到布局,但我认为这不是将代码复制到所有控制器的最佳方式,也许我想扩展基本控制器并在这里设置我的逻辑?
请告诉我做我想做的最佳实践。
附言。Tnx,对不起我的英语
我需要将数据从控制器发送到主布局(类似于顶部菜单中的新消息通知器)我在所有应用程序中都需要它(全局)
我找到了一种将变量传递给布局的方法
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 { private $_model;
function Update()
{
return $this->myvar='this is my variable';
}
}
您可以像这样在布局文件中访问 echo Yii::app()->user->update();