Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je débute avec le Zend Framework. Jusqu'à maintenant j'ai réussi à aboutir à ce que je souhaitais grace aux super didactitiels trouvés en autre par l'intermédiaire de ce site
Cependant il y a deux petits points sur lesquels j'ai des questions :
- A quoi sont sensés servir les fichiers "helpers", à éviter la duplication de code ?
- Mon autre question concerne le Controleur. J'ai dans mes Controleurs du code dupliqué, comme par exemple celui-ci :
function init() { $this->view->baseUrl = $this->_request->getBaseUrl(); $this->view->setEscape('utf8_encode'); Zend_Loader::loadClass('MonModule'); }
Je penses que la solution serait de créer ma propre classe en étendant Zend_Controller_Action, es-ce que je me trompe ?
Si non, ou dois-je placer cette nouvelle classe que je nommerai par exemple My_Controller_Action (es-ce un nommage correct ?), étant donné que j'ai jusqu'à maintenant suivi l'arborescence conseillé par le Zend Framework. Dans le dossier /helpers/, ou bien ailleur ?
Merci bien.
Cordialement,
Laurent
Dernière modification par Ouaibou (26-06-2007 19:59:30)
Hors ligne
1° point :
il ya deux types (au moins...) de helpers :
les action helpers qui permettent d'ajouter des fonctionnalités à tous tes controllers qui étendent Zend_Controller_Action.
voir le lien suivant :
http://framework.zend.com/manual/en/zen … lpers.html
les view helpers servent à te faciliter la vie quand tu construis tes views. Par exemple le code suivant qui se trouve dans le script de ta vue:
<?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
Où $this fait référence à la vue en cours, fabrique pour toi un input de type texte.
Tu peux créer tes propres view helpers. Attention, ils ne se limitent pas à cracher du html, tu peux t'en servir de proxy pour accéder à la base et récupérer des infos que tu veux afficher dans ta vue.
2° point, tu as bien la solution d'étendre Zend_Controller_Action (je fais toujours ça, car j'ai toujours besoin de rajouter des initialisations communes à tous mes controlleurs).
En imaginant que tu as un répertoire libraries dans le quel tu as placé ZF, Zend_Controller_Action signifie que Action.php est dans le répertoire libraries/Zend/Controller/Action/Action.php.
Donc tu peux faire un Zend_Loader::loadClass('My_Controller_Action'); si ta classe suit cette arborescence : libraries/My/Controller/Action/Action.php. C'est la convention de nommage employé par ZF. L'usage courant est de nommer ses propres classes en les préfixant de quelques lettres qui font référence à ton projet en cours (par exemple, mes classes commencent par Bew dans mon projet actuel, j'ai donc un Bew_Controller_Action, Bew_View, etc...
Sinon pour initialiser la view à laquelle tu fais référence dans ton exemple tu pourrais aussi utiliser Zend_config pour lire un fichier ini dans lequel tu places tes infos, puis dans index.php, quand tu instancie ta vue, tu passes les paramètres récupérés dans le fichier ini. Comme ça ta view est paramétrée pour tous tes controllers.
[view] view.encoding = "UTF-8" view.escape = htmlentities view.strictvars = 1
Ca c'est le contenu du fichier ini, et voici comment le récupérer pour créer ta vue référencée dans le viewRenderer (si tu l'utilises) :
$view_params = new Zend_Config_Ini($ApplicationDir . '/config/config.ini', 'view'); Zend_Loader::loadClass('Bew_View'); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $viewRenderer->setView(new Bew_View($view_params)) ->setViewSuffix('tpl');
Voilà, voilà, j'ai bien conscience que mes explications sont aussi touffuses que confuses donc n'hésite pas à préciser tes questions.
A+
fred
Dernière modification par fred wolf (27-06-2007 02:15:19)
Hors ligne
fred wolf a écrit:
En imaginant que tu as un répertoire libraries dans le quel tu as placé ZF, Zend_Controller_Action signifie que Action.php est dans le répertoire libraries/Zend/Controller/Action/Action.php.
Je me permet juste un petit commentaire.
Ca ne serait pas libraries/Zend/Controller/Action.php plutôt ?
Hors ligne
yannux a écrit:
fred wolf a écrit:
En imaginant que tu as un répertoire libraries dans le quel tu as placé ZF, Zend_Controller_Action signifie que Action.php est dans le répertoire libraries/Zend/Controller/Action/Action.php.
Je me permet juste un petit commentaire.
Ca ne serait pas libraries/Zend/Controller/Action.php plutôt ?
Effectivement tu as raison
Dernière modification par Ouaibou (27-06-2007 11:34:35)
Hors ligne