web-dev-qa-db-fra.com

Comment passer param du contrôleur à la mise en page dans YII2

Je souhaite envoyer un paramètre du contrôleur à la mise en page (c'est-à-dire main.php). Mais je ne peux pas obtenir le param dans main.php

J'ai essayé:

Code du contrôleur:

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

Et c’est comme ça que j’essayais d’obtenir cela en layout c.-à-d. main.php

  1. $this->param (comme dans yii 1)
  2. $param

Mais je ne peux pas obtenir de valeur param en mise en page. Quelqu'un peut-il me dire comment faire cela?

44
Maverick

yii\base\View a une propriété spéciale $ params .

Par exemple, il est utilisé pour la construction de la chapelure dans les modèles de code CRUD générés par défaut avec Gii.

Vous pouvez le définir comme ceci avant le rendu:

use Yii;

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

Dans un contrôleur, vous pouvez le configurer comme suit:

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

Ensuite, il sera disponible dans les vues (y compris la disposition principale):

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

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

Vous pouvez également le trouver dans guide officiel .

80
arogachev

Je voudrais vous suggérer quelques étapes pour résoudre ce problème.

  1. paramètre pass pour voir le fichier
  2. Définir le paramètre pour afficher le paramètre
  3. Vérifier le paramètre et si existent, utilisez-le.

    //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

C’est parce que vous rendez la vue index.php, Pas celle main.php.

Et $param Voici comment vous l'obtenez dans la version 1.1.

UPD: Si vous voulez un paramètre dans votre mise en page main.php, Déclarez-le dans votre classe Controller et vous pourrez alors l'obtenir $this->param De cette façon.

UPD2: Dans la version 2.0, il semble que vous deviez déclarer param dans une classe yii\web\View. Et y accéder via Yii::$app->view->param.

0
Vick

appeler directement $ param u devrait obtenir la valeur, essayez

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

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

in layout
echo $this->param;
0
onegun