web-dev-qa-db-ja.com

YII2でコントローラーからレイアウトにパラメーターを渡す方法

パラメーターをコントローラーからレイアウト(つまり、main.php)に送信したい。しかし、main.phpでパラメーターを取得することはできません

私は試した:

コントローラーコード:

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

そして、これは私がレイアウトでこれを取得しようとしていた方法です。 main.php

  1. $this->param(yii 1)のように)
  2. $param

しかし、レイアウトでパラメーター値を取得することはできません。誰もこれを行う方法を教えてもらえますか?

44
Maverick

yii\base\View には特別な $ params プロパティがあります。

たとえば、Giiで生成されたデフォルトのCRUDコードテンプレートでパンくずリストを構築するために使用されます。

レンダリングする前に次のように設定できます。

use Yii;

Yii::$app->view->params['customParam'] = 'customValue';

コントローラ内では、次のように設定できます。

$this->view->params['customParam'] = 'customValue';

次に、ビューで使用可能になります(メインレイアウトを含む):

/* @var $this yii\web\View */

echo $this->params['customParam'];

公式ガイド にもあります。

80
arogachev

この問題に対するいくつかの手順を提案したいと思います。

  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"];  
    }
    
1
msucil

これは、index.phpビューではなく、main.phpビューをレンダリングしているためです。

$paramこれは、1.1バージョンでの取得方法です。

UPD:main.phpレイアウトにパラメーターが必要な場合は、Controllerクラスで宣言し、このようにして$this->paramを取得できます。

UPD2:2.0バージョンでは、yii\web\Viewクラスでparamを宣言する必要があるようです。そしてYii::$app->view->param経由でアクセスします。

0
Vick

$ param uを直接呼び出して値を取得し、試してください

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

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

in layout
echo $this->param;
0
onegun