Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
J'ai un souci avec une ébauche de site que j'ai réalisée avec la version précédente du Framework. J'ai un contrôleur principal et un contrôleur "admin".
Dans une action de ce dernier, j'ouvre un flux xml à l'aide de SimpleXML et je l'enregistre dans une variable membre de mon composant View et je lance le rendu.
ACTION : function chargeSortieAction() { // Début des traitements $this->view->title = "Le titre à afficher"; // Chargement du flux $content = "<?xml version='1.0' encoding='ISO-8859-1' ?> <item> <title>mon titre</title> <description>description</description> <date>2008-03-26</date> </item>"; // Stockage dans la variable View $this->view->xml = new SimpleXMLElement($content); // Affichage de la vue $this->render(); }
Dans le script d'affichage, ma variable View ne contient plus les membres que j'ai ajoutés dans le contrôleur: view->xml et view->title.
AFFICHAGE : <html> <head> <title><?php echo $this->escape($this->title); ?></title> </head> <body> <?php Zend_Debug::dump($this); ?> <?php foreach ($this->xml->item as $item) { echo "Affichage des éléments"; } ?> </body> </html>
PHP me renvoie l'erreur suivante au moment d'accéder à $this->xml
Cela fonctionnait pourtant avec la version précédente du ZF.
Pour migrer le site, j'ai renommer mes script d'affichage pour respecter les nouvelles conventions de nommage des actions.
Est-ce qu'il y a qqchose qui a changé avec la dernière version pour le passage des variables entre le controleur et la vue?
Est-ce que la méthode utilisée et qui fonctionnait auparavant n'était pas correcte ?
Merci d'avance pour votre aide
Jerome
Dernière modification par sareum (04-04-2008 10:07:58)
Hors ligne
Sur quel version se script fonctionnait?
Y'a t-il du code avant dans un init() par exemple qui initialise la vue?
// Affichage de la vue $this->render();
Je ne sais pas si tu as vu mais depuis la 0.9 je crois, un vue est instancié et rendu automatiquement. Donc pas besoin de ce petit bout de code.
Hors ligne
Cela fonctionnait sur la 0.9.3 au tout début et puis sur une version 1.0.3 ou 1.0.4, je ne me souviens plus
Voici l'init du contrôleur:
function init() { // Initialisation de la fonction global $g_logger; // Début des traitements global $G_SCRIPT_PATH; $this->view = new Zend_View(); $this->view->setScriptPath($G_SCRIPT_PATH); $this->view->baseUrl = $this->_request->getBaseUrl(); // Chargement des tables à utiliser etc... }
Typiquement ce code d'instanciation de la vue dans Init() n'est plus nécessaire depuis la 0.9 ?
Hors ligne
Exacte. Cherche du côté du ViewRenderer.
Du coup si tu changes le scriptPath tu peux faire ça dans le bootstrap. Y'a un bout de code récent qui traîne sur le forum.
Par contre, tu as toujorus accès à $this->view dans le controller.
Donc la ton $this->xml devrait fonctionner
Hors ligne
Trouvé!
J'ai juste retiré l'instanciation de ma vue dans Init() du contrôleur. Cela devait "occulter" la vue par défaut ou alors la vue par défaut devait être recrée par le controleur au moment de charger le script d'affichage.
Maintenant le contrôleur contient juste :
function init() { // Initialisation de la fonction global $g_logger; // Chargement des tables à utiliser etc... } function chargeSortieAction() { // Début des traitements $this->view->title = "Le titre à afficher"; // Chargement du flux $content = "<?xml version='1.0' encoding='ISO-8859-1' ?> <item> <title>mon titre</title> <description>description</description> <date>2008-03-26</date> </item>"; // Stockage dans la variable View $this->view->xml = new SimpleXMLElement($content); }
Et dans le script d'affichage je retrouve bien l'accès à mes variables
Merci beaucoup!
Hors ligne
Pages: 1