yii2正确的应用程序架构(将数据传递给布局)

时间:2015-02-03 10:50:08

标签: php yii2 yii2-advanced-app

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

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

Yii::$app->controller->myvar

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

请告诉我最好的做法,做我想做的事。

PS。 Tnx抱歉我的英文

3 个答案:

答案 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

&#39;用户&#39; =&gt;数组(&#39;类&#39; =&gt;&#39; WebUser&#39;,//启用基于Cookie的身份验证&#39; allowAutoLogin&#39; ; =&gt; true,),

之后在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();