Подтвердить что ты не робот

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

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

Я пробовал:

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

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

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

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

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

4b9b3361

Ответ 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']