如何在YII2中将控制器中的参数传递给布局

时间:2015-01-20 06:19:21

标签: php yii2

我想从控制器向布局发送参数(即main.php)。但是我无法在main.php中获得参数

我试过了:

控制器代码:

$this->render('index',array('param' => $paramValue));

这就是我试图在布局中获得这一点的方式。 main.php

  1. $this->param(如第1条所述)
  2. $param
  3. 但是我无法在布局中获得参数值。谁能告诉我怎么做?

6 个答案:

答案 0 :(得分:79)

yii\base\View具有特殊的$params属性。

例如,它用于使用Gii在默认生成的CRUD代码模板中构建面包屑。

您可以在渲染之前将其设置为:

use Yii;

Yii::$app->view->params['customParam'] = 'customValue';

在控制器内部,您可以这样设置:

$this->view->params['customParam'] = 'customValue';

然后它将在视图(包括主要布局)中可用:

/* @var $this yii\web\View */

echo $this->params['customParam'];

您也可以在official guide中找到它。

答案 1 :(得分:2)

在Yii2中,您可以使用$this->context从视图访问控制器对象,例如,如果在控制器中设置了以下参数:

public $title = 'My custom title';

然后在您的布局中,您可以像这样阅读它:

$this->context->title

Yii文档的Accessing Data in Views

部分对此进行了说明。

答案 2 :(得分:0)

这是因为您正在呈现index.php视图,而不是main.php视图。

$param这就是你在1.1版本中得到它的方式。

UPD:如果您希望main.php布局中的参数在您的Controller课程中声明,那么您就可以通过这种方式获得$this->param

UPD2:在2.0版本中,你需要在yii \ web \ View类中声明param。并通过Yii::$app->view->param访问它。

答案 3 :(得分:0)

直接调用$ param你应该得到值,试试

in controller declare a $param,
public $param = '';

then in the acction do
$param='haha';

in layout
echo $this->param;

答案 4 :(得分:0)

我想建议你解决这个问题的一些步骤。

  1. 将参数传递给视图文件
  2. 设置参数以查看参数
  3. 检查参数,如果存在,则使用它。

    //in controller method
    $this->render("view-file-name",["paramName" => "some parameter"]);
    
    //in view file for eg: index.php
    //i'm passing paremeter sent form controller's action to view params.
    $this->params["paramFromViewFile"] = $paramName; //here $paramName is the parameter we sent from controller's method
    
    //access parameter sent from view file
    if($this->params && !empty($this->params["paramFromViewFile"]))
    {
         echo $this->params["paramFromViewFile"];  
    }
    

答案 5 :(得分:-1)

我遇到了同样的问题,我通过以下方式解决了该问题:

1 / 在我的控制器中,我这样做

$ this-> view-> params ['typeUser'] ='Internaut';

2 / 在我看来

$ this-> params ['typeUser']或echo $ this-> params ['typeUser']