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

Posted

技术标签:

【中文标题】如何将参数从控制器传递到 YII2 中的布局【英文标题】:How to pass param from controller to layout in YII2 【发布时间】:2015-03-18 07:14:19 【问题描述】:

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

我试过了:

控制器代码:

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

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

    $this->param(如 yii 1) $param

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

【问题讨论】:

yiiframework.com/doc-2.0/…你应该重新阅读手册并查看->beginContent()方法。 您可以使用 $this->context 来执行此操作。看我的回答:***.com/a/60463356/884177 【参考方案1】:

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

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

UPD:如果您想在 main.php 布局中添加一个参数,请在您的 Controller 类中声明它,然后您就可以通过这种方式获得 $this->param

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

【讨论】:

main.php 是主布局文件。我们永远不需要渲染那个文件 我已经尝试过这个并且得到如下错误:“Getting unknown property: yii\web\View::param”【参考方案2】:

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

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

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

in layout
echo $this->param;

【讨论】:

使用 $this->controller->param【参考方案3】:

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找到它。

【讨论】:

【参考方案4】:

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

    传参查看文件 设置参数查看参数

    检查参数,如果存在则使用它。

    //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】:

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

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

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

    在我看来

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

【讨论】:

【参考方案6】:

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

public $title = 'My custom title';

然后在你的布局中你可以这样读:

$this->context->title

在 Yii 文档中的解释:Accessing Data in Views

【讨论】:

以上是关于如何将参数从控制器传递到 YII2 中的布局的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 - 如何获取从控制器传递的所有视图参数?

如何将文件中的其他参数从 Angular 传递给 ASP.NET Core 控制器?

如何使用 AJAX 将数据从视图传递到控制器

CodeIgniter:将参数从视图传递到控制器?

将参数从视图传递到控制器

Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?