如何在 YII2 中将参数从控制器传递到布局
How to pass param from controller to layout in YII2
我想将参数从控制器发送到布局(即 main.php)。但是我无法在 main.php
中获取参数
我试过了:
控制器代码:
$this->render('index',array('param' => $paramValue));
这就是我试图在布局中得到它的方式。 main.php
$this->param
(在 yii 1 中)
$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 中找到它。
我想就这个问题向您建议一些步骤。
- 传递参数查看文件
- 设置参数查看参数
检查参数,如果存在则使用它。
//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"];
}
我遇到了同样的问题,我解决了这个问题:
在我的控制器示例中,我这样做
$this->view->params['typeUser'] = 'Internaut';
在我看来
$this->params['typeUser'] or echo $this->params['typeUser']
在 Yii2 中,您可以使用 $this->context
从视图访问您的控制器对象,例如,如果您在控制器中设置了如下参数:
public $title = 'My custom title';
然后在您的布局中,您可以这样阅读:
$this->context->title
在 Yii 文档的以下部分有解释:Accessing Data in Views
我想将参数从控制器发送到布局(即 main.php)。但是我无法在 main.php
中获取参数我试过了:
控制器代码:
$this->render('index',array('param' => $paramValue));
这就是我试图在布局中得到它的方式。 main.php
$this->param
(在 yii 1 中)$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 中找到它。
我想就这个问题向您建议一些步骤。
- 传递参数查看文件
- 设置参数查看参数
检查参数,如果存在则使用它。
//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"]; }
我遇到了同样的问题,我解决了这个问题:
在我的控制器示例中,我这样做
$this->view->params['typeUser'] = 'Internaut';
在我看来
$this->params['typeUser'] or echo $this->params['typeUser']
在 Yii2 中,您可以使用 $this->context
从视图访问您的控制器对象,例如,如果您在控制器中设置了如下参数:
public $title = 'My custom title';
然后在您的布局中,您可以这样阅读:
$this->context->title
在 Yii 文档的以下部分有解释:Accessing Data in Views