Как передать параметры из контроллера в макет в YII2


Я хочу отправить параметр из контроллера в макет (т. Е. main.php). Но я не могу ввести параметр main.php

Я пытался:

Код контроллера:

$this->render('index',array('param' => $paramValue));

И вот как я пытался получить это в макете ie. main.php

  1. $this->param (как в yii 1)
  2. $param

Но я не могу получить значение параметра в макете. Кто-нибудь может сказать мне, как это сделать?

 41
Author: gvlasov, 2015-01-20

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'];

Вы также можете найти его в официальном руководстве.

 71
Author: arogachev, 2016-03-28 04:57:10

Прямой вызов $param u должен получить значение, попробуйте

in controller declare a $param,
public $param = '';

then in the acction do
$param='haha';

in layout
echo $this->param;
 0
Author: onegun, 2015-01-20 06:41:49

Это потому, что вы отображаете index.php представление, а не main.php.

И $param вот как вы получаете это в версии 1.1.

UPD: Если вам нужен параметр в вашем макете main.php, объявите его в своем классе Controller, и тогда вы сможете получить его $this->param таким образом.

UPD2: Похоже, в версии 2.0 вам нужно объявить параметр в классе yii\web\View. И получить к нему доступ через Yii::$app->view->param.

 0
Author: Vick, 2015-01-20 06:47:50

Я хотел бы предложить вам несколько шагов для решения этой проблемы.

  1. передать параметр для просмотра файла
  2. Установите параметр для просмотра параметра
  3. Проверьте наличие параметра и, если он существует, используйте его.

    //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"];  
    }
    
 0
Author: msucil, 2017-01-10 17:35:09