web-dev-qa-db-fra.com

Yii: action de rendu en utilisant une disposition différente de celle du contrôleur

Dans Yii, existe-t-il un moyen de rendre une seule action en utilisant un layout différent de celui défini pour le contrôleur? J'ai une action que je voudrais formater différemment du reste, et ce n'est pas clair d'après la documentation si c'est possible.

23
Matt Hampel

Je crois que sur cette action, vous pouvez simplement appeler le $layout variable.

public function actionYourAction()
{
    $this->layout = 'nameOfYourAltLayout';
}

Les instructions dans le lien ci-dessous indiquent que vous devrez définir cette variable pour chaque action car vous ne pouvez pas simplement définir la variable publique par défaut et vous attendre à ce que les autres actions reviennent par défaut à celle-ci.

http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/

:: Modifier ::

Il semble que la meilleure pratique consiste ici à définir le $layout variable dans le script de vue pour l'action particulière qui l'appelle. Par exemple, si votre action appelle viewscriptone.php alors le fichier de vue viewscriptone contiendrait:

$this->layout = 'nameOfYourAltLayout';

Il est plus judicieux de remplacer ici plutôt que dans l'action du contrôleur. Cependant, comme LDG l'a dit, si la disposition est conditionnelle, vous devriez probablement la conserver dans le contrôleur. Ces informations peuvent toujours être trouvées dans le lien ci-dessus dans la section "Utilisation des mises en page" de la page.

51
k to the z

Cette entrée wiki fait un très bon travail en décrivant comment utiliser les mises en page, ce qui vaut vraiment la peine d'être lu. Je pense que vous pouvez définir une disposition par défaut au début de votre classe de contrôleur, puis la remplacer dans une fonction d'action particulière sans avoir à définir la disposition dans chaque action, au moins cela a fonctionné pour moi. Vous pouvez également utiliser la fonction beforeAction pour toutes les situations complexes. Et, comme vous le savez peut-être déjà, vous pouvez utiliser renderPartial pour contourner complètement la mise en page.

5
ldg