Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Je suis tout nouveau sur le framework Zend, bonjour à tous!
J'aurais voulu savoir s'il y avait un moyen simple (autre que par l'URL) de propager une erreur sur une vue après un redirect?
Pour l'instant je n'ai trouvé que la solution du
redirect->(url."?erreur=xxx);
Mais je ne trouve pas cela très élégant!
Hors ligne
tu peux passer tes erreurs dans la vue mais il faut avoir créé ta vue dans ton index.php (enfin je crois):
dans ton controleur:
$errors=array('erreur1','erreur2');
$this->view->assign('errors',$errors);
dans ta vue:
foreach ($this->errors as $error){
if ($error != '') echo $error[0];
}
j'espere que ca a pu t'aider!!
Hors ligne
Le plus simple a mon avis c'est de fonctionner avec une petite variable de session qui est réinitialisée en fin de chaque page. Comme le flash notice de rails. C'est simple et efficace.
Hors ligne
Isilgawen a écrit:
Le plus simple a mon avis c'est de fonctionner avec une petite variable de session qui est réinitialisée en fin de chaque page. Comme le flash notice de rails. C'est simple et efficace.
Totalement d'accord.
Par contre je me suis penché sur le composant Zend_Session hier soir, et j'ai un doute sur mes compétences d'un coup
Son utilisation me semble un peu obscur. Pour créer et récupérer un Namespace.
// in the Zend_Auth component require_once 'Zend/Session.php'; $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "myusername";
Ce namespace, je le créé où et je le récupère comment dans un autre controller par exemple ...?
Hors ligne
Bon je me répond déjà un peu à moi même.
Voilà comment je fait pour l'instant.
MyController.php public function init() { /* mon code etc.......... */ if(Zend_Session::namespaceIsset('flash_message')){ $this->view->result = Zend_Session::namespaceGet('flash_message'); Zend_Session::namespaceUnset('flash_message'); } } public function saveAction() { $flash_message = new Zend_Session_Namespace('flash_message'); /* mon code etc.......... */ if($my_annonce['id'] > 0){ $annonce->update($my_annonce, 'id = '.$my_annonce['id']); foreach ($my_annonce_data as $item){ $annonce_data->update($item, 'id = '.$item['id']); } /* !!!!! UTILISATION SESSION !!!!! */ $flash_message->state = 'true'; $flash_message->message = "L'annonce est mise à jour"; } }
Et ça tourne pas mal. Y'as peut être une meilleur / autre méthode ?
Hors ligne
Perso, j'initialise mes sessions (les namespaces) dans le fichier d'initialisation global.
De toute façon c'est partagé dans toute l'appli, ça me parrait important que ça soit connu dès le départ. Après je mets mes namespaces dans la registry pour y avoir accès partout dans mon appli.
dans la pratique, j'utilise un seul namespace pour un site, sauf si j'utilise une librairie qui elle même utilise Zend_Session. Elle peut alors utilise son propre namespace.
A+,
Philippe
Hors ligne
Je fonctionne comme philippe un seul namespace avec son instance dans la registry.
Dans le bootstrap ca donne ca :
// Init session Zend_registry::set("session",new Zend_Session_Namespace('monSite'));
Hors ligne
Oki merci pour les infos. Je suis pas core trop convaincu mais voilà comment j'ai modifié...je verrais à l'usage...
public function init() { $this->session = Zend_Registry::get('session'); if(!is_null($this->session->flash_message)){ $this->view->result = $this->session->flash_message; } $this->session->flash_message = null; } public function deleteAction() { /* du code.... etc.. */ else{ $flash_message['state'] = 'false'; $flash_message['message'] = "Cochez les annonces avant de cliquer sur Supprimer."; } $this->session->flash_message = $flash_message; $this->_redirect('/annonce/index'); }
Hors ligne
Bonjour, bonjour,
peut-être devrais-tu jeter un coup d'oeil à une fonctionnalité rajoutée dans la partie controller :
Les actions helpers qui sont une sorte de plugins pour les actions et non au niveau du controller. Dans la doc tu trouveras un exemple avec un flash messenger à la mode ror, genre :
$this->_helper->flashMessenger->addMessage('ce_que_tu_veux');
voici le lien, c'est dans la partie incubator proposal et devrait se trouver dans le core du svn je crois :
http://framework.zend.com/wiki/display/ … ion_Helper
Je l'utilise et c'est bien, mais je ne sais pas si ça va dans le sens de ta question...
La bonne soirée,
fred
Dernière modification par fred wolf (16-04-2007 18:14:42)
Hors ligne
Pages: 1