如何将参数从控制器传递到 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 中的布局的主要内容,如果未能解决你的问题,请参考以下文章