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

Php 如何在YII2中将参数从控制器传递到布局,php,yii2,Php,Yii2,我想将一个参数从控制器发送到布局(即main.php)。但是我无法在main.php中获取参数 我试过: 控制器代码: $this->render('index',array('param' => $paramValue)); 这就是我如何在布局ie.main.php中实现的 $this->param(如yii 1所示) $param 但我无法在布局中获取参数值。有人能告诉我怎么做吗?这是因为您正在呈现index.php视图,而不是main.php视图 而$param这就是在1.1

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

我试过:

控制器代码:

$this->render('index',array('param' => $paramValue));
这就是我如何在布局ie.main.php中实现的

  • $this->param
    (如yii 1所示)
  • $param

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

    这是因为您正在呈现
    index.php
    视图,而不是
    main.php
    视图

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

    UPD:如果您希望在
    main.php
    布局中有一个参数,请在
    Controller
    类中声明它,然后您就可以通过这种方式获得它


    UPD2:看起来在2.0版本中,您需要在yii\web\View类中声明param。并通过
    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;
    
    具有特殊的性质

    例如,它用于使用Gii在默认生成的CRUD代码模板中构建面包屑

    在渲染之前,可以这样设置:

    use Yii;
    
    Yii::$app->view->params['customParam'] = 'customValue';
    
    在控制器内,您可以如下设置:

    $this->view->params['customParam'] = 'customValue';
    
    public $title = 'My custom title';
    
    $this->context->title
    
    然后它将在视图(包括主布局)中可用:


    您也可以在中找到它。

    我想建议您解决此问题的一些步骤

  • 传递参数以查看文件
  • 将参数设置为查看参数
  • 检查参数,如果存在,则使用它

    //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"];  
    }
    

  • 我也有同样的问题,我通过以下方式解决:

    <强>在我的控制器PAR中,我做的是< /强>

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

  • 在我看来

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


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

    $this->view->params['customParam'] = 'customValue';
    
    public $title = 'My custom title';
    
    $this->context->title
    
    然后在布局中,您可以这样阅读:

    $this->view->params['customParam'] = 'customValue';
    
    public $title = 'My custom title';
    
    $this->context->title
    

    Yii文档第节对此进行了解释:

    main.php是主布局文件。我们永远不需要呈现该文件。我已经尝试过这个方法,并且出现了如下错误:“获取未知属性:yii\web\View::param”您应该重新阅读手册并查看
    ->beginContent()
    方法。您可以使用$this->context来执行此操作。查看我的答案:使用$this->controller->param