Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-03-2009 16:37:52

Nikko
Membre
Lieu: Rueil (Haut-de-Seine)
Date d'inscription: 19-12-2008
Messages: 95

[Résolu][Zend_Layout][1.6]Passer des paramètres à une vue

Bonjour à tous,

Dans mon appli, j'utilise Zend_Layout. J'ai donc une page /views/layouts/layout.phtml. Ce layout récupère la vue de mon action en cours.

Dans mon action, je gère des erreurs. Et lorsqu'une erreur est détectée, je veux afficher un message (variable selon l'erreur) à l'écran à la place de la "page sans erreur". Pour se faire, j'ai une page /views/scripts/common/avertissement.phtml avec un code tout bête :

Code:

<?php
if ($this->avertissement) {
    print "<div class='feedback'><p>" . $this->avertissement . '</p></div>';
}
?>

Donc, dans mon action, je renseigne $this->avertissement comme ceci : $this->view->avertissement = "Mon message d'erreur";
Et je l'affiche comme ça : $this->view->actionTemplate = 'scripts/common/avertissement.phtml';
Mais mon message ne s'affiche pas et la page sans erreur s'affiche.

Ma question est donc la suivante : comment faire passer mon message d'erreur à avertissement.phtml et l'afficher puisque le $this->layout()->content ne permet pas de le faire ?

Je vous remercie par avance,
Nikko

Dernière modification par Nikko (12-03-2009 10:48:18)


Nikko

Etudiant en école d'ingénieur à l'INSIA

Hors ligne

 

#2 11-03-2009 18:27:03

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [Résolu][Zend_Layout][1.6]Passer des paramètres à une vue

essaye comme ça :

Code:

... le code pour la vue 'index'
$this->render('index'); => le nom de ta vu pour ton action

.... le code pour la vue 'averissement'
....
$this->render('avertissement');

ou plus simplement dans ton layout tu met directement ton message

Code:

if (isset($this->message)) echo $this->message;

sinon regarde le Flashmessenger, affichage d'un message après redirection

Dernière modification par baboune (11-03-2009 18:34:28)

Hors ligne

 

#3 12-03-2009 08:43:34

Nikko
Membre
Lieu: Rueil (Haut-de-Seine)
Date d'inscription: 19-12-2008
Messages: 95

Re: [Résolu][Zend_Layout][1.6]Passer des paramètres à une vue

Bonjour Baboune,

Merci de me consacrer du temps.
La solution que tu m'apportes est incompatible avec mon programme car $this->render permet d'afficher le contenu d'une action d'un controller. Dans mon cas, il affiche une action de mon controller saisies. Or, la page que je veux afficher (avertissement.phtml) n'a rien à voir avec ce controller. Par conséquent, Zend ne trouvera pas views/scripts/saisies/avertissement.phtml puisque celle-ci se trouve dans views/scripts/common/avertissement.phtml
J'ai donc opté pour ta deuxième solution qui est d'intégrer le message directement dans mon layout.phtml. Et ça fonctionne, je n'y avais tout simplement pas pensé.

Merci encore de m'avoir proposé cette solution.

Cordialement,
Nikko

Dernière modification par Nikko (12-03-2009 10:47:58)


Nikko

Etudiant en école d'ingénieur à l'INSIA

Hors ligne

 

#4 12-03-2009 13:33:40

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [Résolu][Zend_Layout][1.6]Passer des paramètres à une vue

$this->render permet d'afficher le contenu d'une action d'un controller

non pas du tout, $this->render effectue le rendu d'une vue différente. Si ton controller s'appelle Index dans le module default, et l'action ajouter, la vue assigné a ton action est ajouter.phtml dans le répertoire de ton module, view->script->"nom du controlleur"->"action".phtml, donc view->script->index->ajouter.phtml.

Imagine que dans ma vue je fait simplement l'affichage d'une form : echo $this->form;
et que j'ai 4 controllers qui on chacun une action ajouter qui affiche simplement une form

je vais mettre cette vue ajouter.phtml dans un répertoire  pas exemple "common"

dans chaque action je vais faire pour toute mes actions ajouter:

Code:

$this->render('ajouter')

et dans le bootstrap

Code:

$view = new Zend_View;
$view->addScriptPath('./application/common');
$viewRenderer->setView($view)
             ->setViewBasePathSpec(':moduleDir/views') // facultatif => comportement par défaut
             ->setViewScriptPathSpec(':controller:action.:suffix')// par défaut : :controller/:action.:suffix
             ->setViewScriptPathNoControllerSpec(':action.:suffix'); // facultatif => comportement par défaut

comme ça toute mes actions ajouter vont utiliser le même vue ajouter qui est dans common.

sinon tu peut simplement utiliser : $this->renderScript('*******.phtml')

regarde le ViewRenderer
http://framework.zend.com/manual/fr/zen … lpers.html

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages