How to pass param from controller to layout in YII2
PhpYii2Php Problem Overview
I want to send a parameter from controller to layout (i.e. main.php). But I am not able to get the param in main.php
I tried:
Controller Code:
$this->render('index',array('param' => $paramValue));
And this is how i was trying to get this in layout ie. main.php
$this->param
(as in yii 1)$param
But i am not able to get param value in layout. Can anyone tell me how to do this?
Php Solutions
Solution 1 - Php
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.
Solution 2 - Php
I would like to suggest you some steps for this problem.
-
pass parameter to view file
-
Set parameter to view parameter
-
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"]; }
Solution 3 - Php
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
Solution 4 - Php
Thats because you are rendering index.php
view, not the main.php
one.
And $param
this is how you get it in 1.1 version.
UPD: If you want a param in your main.php
layout declare it in your Controller
class, and then you will be able to get it $this->param
this way.
UPD2: Looks like in 2.0 version you need to declare param in a yii\web\View class. And access it via Yii::$app->view->param
.
Solution 5 - Php
directly calling $param u should get the value, try
in controller declare a $param,
public $param = '';
then in the acction do
$param='haha';
in layout
echo $this->param;
Solution 6 - Php
I had a same problem, I resolve that in:
-
In my Controller par exemple, I do that
$this->view->params['typeUser'] = 'Internaut';
-
in my View
$this->params['typeUser'] or echo $this->params['typeUser']