2015-01-20 9 views
36

Ich möchte einen Parameter von Controller zu Layout (d. H. Main.php) senden. Aber ich bin nicht in der Lage, die param in main.php zu bekommenWie Param übergeben von Controller zu Layout in YII2

Ich habe versucht:

Controller-Code:

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

Und das ist, wie ich versuchte, diese in das Layout also zu bekommen. main.php

  1. $this->param (wie in yii 1)
  2. $param

Aber ich bin nicht in der Lage param Wert in dem Layout zu erhalten. Kann mir jemand sagen, wie ich das mache?

+0

http: //www.yiiframework.com/doc-2.0/guide-structure-views.html # creating-layouts sollten Sie manuell nachlesen und sich die '-> beginContent()' Methode ansehen. – user1954544

Antwort

57

yii\base\View besondere $params Eigenschaft hat.

Zum Beispiel wird es zum Erstellen von Brotkrumen in standardmäßig generierten CRUD-Code-Vorlagen mit Gii verwendet.

Sie können es so einstellen, bevor Rendering:

use Yii; 

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

Innerhalb eines Controllers Sie es wie folgt einstellen:

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

Dann wird es in Ansichten verfügbar sein (einschließlich Haupt Layout):

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

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

Sie können es auch in official guide finden.

+0

thnx @arogachev .. aber Fehler erhalten "Unbekannte Eigenschaft erhalten: yii \ web \ View :: view" – Maverick

+0

Controller-Code: Yii :: $ app-> Ansicht-> Parameter ['eventForm'] = 'Test Inhalt'; Main.php Code: echo $ this-> Ansicht-> Parameter ['eventForm']; – Maverick

+0

yea...got it .. Ich muss echo $ this-> params ['customParam'] anstelle von echo $ this-> view-> params ['customParam']; – Maverick

0

Das ist, weil Sie index.php Ansicht wiedergeben, nicht die main.php eins.

Und $param ist, wie Sie es in Version 1.1 erhalten.

UPD: Wenn Sie einen Parameter in Ihrem main.php Layout möchten, deklarieren Sie es in Ihrer Controller Klasse, und dann können Sie es $this->param auf diese Weise erhalten.

UPD2: Sieht aus wie in Version 2.0 Sie müssen Param in einer yii \ web \ View-Klasse deklarieren. Und greifen Sie darauf über Yii::$app->view->param.

+0

main.php ist Hauptlayoutdatei. Wir müssen diese Datei nie rendern – Maverick

+0

Ich habe dies bereits versucht und bekomme Fehler wie: "Unbekannte Eigenschaft erhalten: yii \ web \ View :: param" – Maverick

0

direkt $ param Aufruf sollte u den Wert erhalten, versuchen

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

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

in layout 
echo $this->param; 
+0

versuchen, dies habe ich einen Fehler "undefined Index Param" – Maverick

+0

verwenden $ this-> controller-> param –

0

Ich möchte Ihnen einige Schritte für dieses Problem vorschlagen.

  1. Pass Parameterdatei
  2. Set Parameter anzuzeigen Parameter
  3. prüfen Für Parameter anzuzeigen und wenn vorhanden dann verwenden.

    //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"]; 
    } 
    
Verwandte Themen