如何在 YII2 中将参数从控制器传递到布局

How to pass param from controller to layout in YII2

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

中获取参数

我试过了:

控制器代码:

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

这就是我试图在布局中得到它的方式。 main.php

  1. $this->param(在 yii 1 中)
  2. $param

但我无法在布局中获取参数值。谁能告诉我怎么做?

那是因为您正在渲染 index.php 视图,而不是 main.php 视图。

并且 $param 这就是您在 1.1 版本中获得它的方式。

更新:如果你想在你的 main.php 布局中使用参数,请在你的 Controller class 中声明它,然后你将能够得到它 $this->param 这个方式。

UPD2:看起来在 2.0 版本中您需要在 yii\web\View class 中声明参数。并通过 Yii::$app->view->param.

访问它

直接调用$param u应该可以得到值,试试

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

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

in layout
echo $this->param;

yii\base\View has special $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. 设置参数查看参数
  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"];  
    }
    

我遇到了同样的问题,我解决了这个问题:

  1. 在我的控制器示例中,我这样做

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

  2. 在我看来

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

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

public $title = 'My custom title';

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

$this->context->title

在 Yii 文档的以下部分有解释:Accessing Data in Views