我想从控制器向布局发送参数(即main.php)。但是我无法在main.php中获得参数
我试过了:
控制器代码:
$this->render('index',array('param' => $paramValue));
这就是我试图在布局中获得这一点的方式。 main.php
$this->param
(如第1条所述)$param
但是我无法在布局中获得参数值。谁能告诉我怎么做?
答案 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)
我想建议你解决这个问题的一些步骤。
检查参数,如果存在,则使用它。
//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']