0

我需要将数据从控制器发送到主布局(类似于顶部菜单中的新消息通知器)我在所有应用程序中都需要它(全局)

我找到了一种将变量传递给布局的方法

Yii::$app->controller->myvar

从类属性到布局,但我认为这不是将代码复制到所有控制器的最佳方式,也许我想扩展基本控制器并在这里设置我的逻辑?

请告诉我做我想做的最佳实践。

附言。Tnx,对不起我的英语

4

3 回答 3

2

在控制器中,您可以使用

$this->view->params['name'] = 123

并且在布局中

<?= $this->params['name'] ?>
于 2015-02-03T10:57:56.233 回答
1

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
于 2016-03-15T11:02:07.937 回答
0

下面的行添加到 config\main.php

'user'=>array( 'class'=>'WebUser', // 启用基于 cookie 的身份验证 'allowAutoLogin'=>true, ),

之后在 protected\components\WebUser.php 中创建新文件,在这个 WebUser.php 文件中

类 WebUser 扩展 CWebUser { private $_model;

function Update()
{
    return $this->myvar='this is my variable';
}

}

您可以像这样在布局文件中访问 echo Yii::app()->user->update();

于 2015-02-03T11:04:58.183 回答