首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >yii2正确的应用程序架构(将数据传递给布局)

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

Stack Overflow用户
提问于 2015-02-03 18:50:08
回答 3查看 695关注 0票数 0

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

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

代码语言:javascript
运行
复制
Yii::$app->controller->myvar

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

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

ps。Tnx,抱歉我的英语

EN

回答 3

Stack Overflow用户

发布于 2015-02-03 18:57:56

在控制器中,您可以使用

代码语言:javascript
运行
复制
$this->view->params['name'] = 123

在布局中

代码语言:javascript
运行
复制
<?= $this->params['name'] ?>
票数 2
EN

Stack Overflow用户

发布于 2016-03-15 19:02:08

1)可以使用yii全局app参数

代码语言:javascript
运行
复制
Yii::$app->params['foo'] = 'bar'; // controller

代码语言:javascript
运行
复制
echo Yii::$app->params['foo']; // in view/layout/controllers/elsewhere

2)可以使用session。创建一个控制器,该控制器将由其他人扩展,具有以下3个功能:

代码语言:javascript
运行
复制
<?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);
    }
}

现在在您的控制器中

代码语言:javascript
运行
复制
use common\components\BaseController;
...
class MyController extends BaseController
...
$this->setFlash('foo','bar'); // setting flash var

在你看来

代码语言:javascript
运行
复制
echo $this->context->getFlash('foo'); // getting flash var

代码语言:javascript
运行
复制
echo Yii::$app->controller->getFlash('foo'); // getting flash var
票数 1
EN

Stack Overflow用户

发布于 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;

代码语言:javascript
运行
复制
function Update()
{
    return $this->myvar='this is my variable';
}

}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28297047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档