Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonsoir,
Un nouveau problème
L'action index qui est appelée par défaut dans mon controller n'as pas vraiment de signification (sémantiquement parlant). Du coup, je souhaite que lorsque cette action est appelée, elle redirige sur une action liste. J'utilise donc dans la méthode indexAction() la méthode _forward('liste').
Le problème c'est que le méthode init() est visiblement rappelée et génère une erreur indiquant que le context 'text' existe déjà. En mettant un condition dans init() tout fonctionne mais n'y a-t-il pas mieux ?
<?php class IndexController extends Zend_Controller_Action { public function init() { $contextSwitch = $this->_helper->getHelper('contextSwitch'); if ( null === $contextSwitch->getContext('text') ) { $contextSwitch->addContext('text', array( 'suffix' => 'text' )); $contextSwitch->addActionContext('ajax','text')->initContext(); } } //eo init(); public function indexAction() { $this->_forward('liste'); } //eo listeAction(); [...] }
Dernière modification par exotux (11-07-2008 00:37:17)
Hors ligne
Bonjour,
En essayant dans le predispatch ?
public function predispatch() { /* coupé-collé de ton init() ici */ ...
Plus d'infos : http://www.z-f.fr/forum/viewtopic.php?pid=1889
J'utilise :
public $contexts= array ( 'autocomplete' => array ('json', 'xml'), 'rss' => array ('xml') ); public function preDispatch() { $contextSwitch= $this->_helper->contextSwitch(); $contextSwitch->setAutoJsonSerialization( false ); $contextSwitch->initContext(); }
Hors ligne
init() est appelée à la construction de la classe d'action.
Celle-ci est construite à chaque passage dans la boucle de dispatching, c'est donc le cas après un _forward (qui recrée un jeton pour une autre boucle).
Hors ligne
Bonsoir,
Le fait de copier le contenu de ma méthode init() dans la méthode preDispatch() ne change rien. Predispatch est appelée avant chaque action, donc elle est appelée lors de l'appel de l'action index, puis lors de l'appel de l'action 'liste'. Je me retrouve dans la même situation qu'avec la méthode init(), j'ai une erreur indiquant que le context 'text' existe déjà. Enfin si j'ai bien tout compris
La méthode que m'indique "FTE" ne permet pas de créer mon propre "context" ou j'ai raté une étape. Je veux que ma vue affiche une simple chaîne de caractère. Je ne souhaite pas utiliser XML ou JSON. C'est pourquoi j'écris ceci :
$contextSwitch->addContext('text', array( 'suffix' => 'text' )); $contextSwitch->addActionContext('ajax','text')->initContext();
J'en déduis que la création d'un context ne doit pas ce faire dans un controller. Mais dans ce cas, ou puis-je le faire ? Il y a aussi la possibilité d'utiliser setContext() au lieu de addContext() qui va créer un nouveau context ou écraser l'ancien context si il existe déjà.
Qu'en pensez-vous ?
Dernière modification par exotux (08-07-2008 00:23:49)
Hors ligne
Ok pour le predispatch vs init j'avais suvolé.
Une alternative au "context" à tester à la fin de ton action :
$response = $this->getResponse(); $response->setHeader('Content-Type', 'text/plain') ->setBody( $tonTexte );
Dernière modification par fte (08-07-2008 14:47:16)
Hors ligne