Как передать параметр из контроллера в макет в YII2
Я хочу отправить параметр с контроллера на макет (т.е. main.php). Но я не могу получить параметр в main.php
Я пробовал:
Код контроллера:
$this->render('index',array('param' => $paramValue));
И вот как я пытался получить это в макете, т.е. main.php
-
$this->param
(как в yii 1)
-
$param
Но я не могу получить значение параметра в макете. Может ли кто-нибудь сказать мне, как это сделать?
Ответы
Ответ 1
yii\base\View имеет специальное свойство $params.
Например, он используется для создания панировок в шаблонах кода CRUD по умолчанию с помощью Gii.
Вы можете установить его так, как это сделать перед рендерингом:
use Yii;
Yii::$app->view->params['customParam'] = 'customValue';
Внутри контроллера вы можете установить его так:
$this->view->params['customParam'] = 'customValue';
Затем он будет доступен в виде (включая основной макет):
/* @var $this yii\web\View */
echo $this->params['customParam'];
Вы также можете найти его в официальном руководстве.
Ответ 2
Я хотел бы предложить вам несколько шагов для решения этой проблемы.
- передать параметр для просмотра файла
- Установить параметр для просмотра параметра
-
Проверить параметр, а если существует, то используйте его.
//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 action to view params.
$this->params["paramFromViewFile"] = $paramName; //here $paramName is the parameter we sent from controller method
//access parameter sent from view file
if($this->params && !empty($this->params["paramFromViewFile"]))
{
echo $this->params["paramFromViewFile"];
}
Ответ 3
Это потому, что вы выполняете рендеринг index.php
, а не main.php
.
И $param
вот как вы его получите в версии 1.1.
UPD: Если вы хотите, чтобы параметр в вашем макете main.php
объявлял его в вашем классе Controller
, и тогда вы сможете получить его $this->param
таким образом.
UPD2: Похоже, что в версии 2.0 вам нужно объявить параметр в классе yii\web\View. И получите доступ через Yii::$app->view->param
.
Ответ 4
вызывающий $param u, должен получить значение, попробуйте
in controller declare a $param,
public $param = '';
then in the acction do
$param='haha';
in layout
echo $this->param;
Ответ 5
У меня была такая же проблема, я разрешаю это в:
1/В моем контроллере, например, я делаю это
$this-> view-> params ['typeUser'] = 'Internaut';
2/в моем представлении
$this-> params ['typeUser'] или echo $this-> params ['typeUser']