How to pass param from controller to layout in YII2

I would like to suggest you some steps for this problem.

  1. pass parameter to view file
  2. Set parameter to view parameter
  3. Check For parameter and If exist then use it.

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

In Yii2 you can access your controller object from a view using $this->context for example if in your controller you set a parameter like this:

public $title = 'My custom title';

Then in your layout you can read it like this:

$this->context->title

It is explained in Yii documentation in section: Accessing Data in Views


yii\base\View has special $params property.

For example it's used for building breadcrumbs in default generated CRUD code templates with Gii.

You can set it like this before rendering:

use Yii;

Yii::$app->view->params['customParam'] = 'customValue';

Inside a controller you can set it like this:

$this->view->params['customParam'] = 'customValue';

Then it will be available in views (including main layout):

/* @var $this yii\web\View */

echo $this->params['customParam'];

You can also find it in official guide.

Tags:

Php

Yii2