Как передать параметры из контроллера в макет в YII2
Я хочу отправить параметр из контроллера в макет (т. Е. main.php). Но я не могу ввести параметр main.php
Я пытался:
Код контроллера:
$this->render('index',array('param' => $paramValue));
И вот как я пытался получить это в макете ie. main.php
-
$this->param
(как в yii 1) $param
Но я не могу получить значение параметра в макете. Кто-нибудь может сказать мне, как это сделать?
4 answers
Yii\база\Представление имеет специальное свойство $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'];
Вы также можете найти его в официальном руководстве.
Прямой вызов $param u должен получить значение, попробуйте
in controller declare a $param,
public $param = '';
then in the acction do
$param='haha';
in layout
echo $this->param;
Это потому, что вы отображаете index.php
представление, а не main.php
.
И $param
вот как вы получаете это в версии 1.1.
UPD: Если вам нужен параметр в вашем макете main.php
, объявите его в своем классе Controller
, и тогда вы сможете получить его $this->param
таким образом.
UPD2: Похоже, в версии 2.0 вам нужно объявить параметр в классе yii\web\View. И получить к нему доступ через Yii::$app->view->param
.
Я хотел бы предложить вам несколько шагов для решения этой проблемы.
- передать параметр для просмотра файла
- Установите параметр для просмотра параметра
-
Проверьте наличие параметра и, если он существует, используйте его.
//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"]; }