2015-01-20 18 views
36

Desidero inviare un parametro dal controller al layout (ad esempio, main.php). Ma io non sono in grado di ottenere il parametro in main.phpCome passare il parametro dal controller al layout in YII2

ho provato:

Codice Controller:

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

Ed è così che ho cercato di ottenere questo nel layout es. main.php

  1. $this->param (come in Yii 1)
  2. $param

ma io non sono in grado di ottenere il valore param nel layout. Qualcuno può dirmi come farlo?

+0

http: //www.yiiframework.com/doc-2.0/guide-structure-views.html # creating-layouts devi rileggere il manuale e guardare il metodo '-> beginContent()'. – user1954544

risposta

57

yii\base\View ha speciale $params proprietà.

Ad esempio, viene utilizzato per creare breadcrumb nei modelli di codice CRUD generati automaticamente con Gii.

È possibile impostare in questo modo prima del rendering:

use Yii; 

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

dentro un controllore è possibile impostare in questo modo:

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

Allora sarà disponibile in vista (compreso il layout principale):

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

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

si possono anche trovare in official guide.

+0

thnx @arogachev .. ma ricevendo errore "Ottenere proprietà sconosciuta: yii \ web \ View :: view" – Maverick

+0

Codice controller: Yii :: $ app-> view-> params ['eventForm'] = 'Test soddisfare'; Codice Main.php: echo $ this-> view-> params ['eventForm']; die; – Maverick

+0

sì..galo .. ho bisogno di user echo $ this-> params ['customParam'] piuttosto che echo $ this-> view-> params ['customParam']; – Maverick

0

Questo è perché si sta visualizzando la vista index.php, non la main.php.

E $param questo è come si ottiene nella versione 1.1.

UPD: Se si desidera un param nel layout main.php dichiararla nella classe Controller, e allora si sarà in grado di farlo $this->param in questo modo.

UPD2: Sembra che nella versione 2.0 sia necessario dichiarare param in una classe yii \ web \ View. E accedervi tramite Yii::$app->view->param.

+0

main.php è il file di layout principale. Non abbiamo mai avuto bisogno di rendere quel file – Maverick

+0

Ho già provato questo e ottenendo errore come: "Ottenere proprietà sconosciuta: yii \ web \ View :: param" – Maverick

0

chiamando direttamente $ param u dovrebbe ottenere il valore, provare

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

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

in layout 
echo $this->param; 
+0

provando questo ho avuto un errore "indice indice indefinito" – Maverick

+0

usare $ this-> controller-> param –

0

Vorrei suggerire alcuni passaggi per questo problema.

  1. parametro passaggio per visualizzare file di
  2. parametro Set per visualizzare il parametro
  3. Controllare Per il parametro e se esiste poi usarlo.

    //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"]; 
    } 
    
Problemi correlati