20 juil
Par Clément dans Tutoriels
Mots-clefs :Controller, Routing, Ruby, Ruby on Rails, Watchmydesk, Zend, Zend Framework, Zend_Controller_Action, Zend_Controller_Router

Dans cet épisode, nous allons voir les conventions de nommage des contrôleurs et leur utilisation au sein du Zend Framework. Nous allons ensuite nous attaquer au routing, ce concept qui permet de dirigé notre application à partir de simple commande en PHP.
Un contrôleur est celui qui reçoit les évènements utilisateur de la vue et ordonne les éventuelles modifications au modèle. C’est aussi celui qui va chercher les résultats à partir des modèles.
Avec le Zend Framework, la création de contrôleur est très simple, mais il faut se souvenir de quelques points :
De ce faite, nous aurons un contrôleur qui ressemblera à cela :
class IndexController extends Zend_Controller_Action{
public function indexAction(){
}
}
Simple non ?
De plus le contrôleur permet d’envoyer des variables à la vue. Pour envoyer une variable à la vue, il vous suffit de vous mettre dans une action et ajouter votre code comme cela :
$this->view->mavariable = $lavarenvoyealavue;
Pour récupérer cette variable dans la vue correspondante à l’action du contrôleur demandé, il vous suffit de faire comme cela :
echo $this->mavariable;
Le Zend Framework possède dans ses sources des fichiers php nommés Action Helpers, qui vont permettre d’effectuer des actions souvent recherchés par les développeurs et très souvent utilisés. Ce sont donc des aides rapide qui permettent d’accéder à des composants du framework directement à partir d’une action dans le contrôleur. Bien évidemment, vous pouvez créer vos propres action helpers.
Nous allons prendre pour exemple un helper très connu des développeurs des framework, qui à été tiré du célèbre framework Ruby RubyOnRails : le FlashMessenger ! Ce composant permet de montrer un message à votre utilisateur suite à une action effectuée.
Pour appeler un helper dans une action, on utilise cela :
// Ici, FlashMessenger est le nom du helper.
$this->_helper->getHelper('FlashMessenger');
Pour utiliser le helper FlashMessenger, il vous suffit de faire cela :
$this->_helper->getHelper('FlashMessenger')->addMessage("Ici mon message pour les utilisateurs");
// Et pour envoyer les messages à la vue :
$this->view->messages = $this->_helper->getHelper('FlashMessenger')->getMessages();
Ce helper permet d’ajouter des messages dans un tableau et est détruit à chaque chargement de page. Ce qui permet d’envoyer plusieurs messages à un utilisateur sans problème !
Le routing permet de définir un URL différente pour un contrôleur, un module et une action donnée.
Un exemple vaut toujours mieux qu’un long discours :
Imaginons, nous avons un contrôleur users et une action register, nous aurons une url de ce genre pour accéder à la page voulue : http://monsite.com/users/register, ce qui n’ai pas vraiment optimisé pour le référencement.
On va donc créer une route qui va permettre de diriger notre contrôleur et action vers la page : http://monsite.com/register pour le référencement.
Pour cela nous allons nous rendre dans notre bootstrap, et allons ajouter cette méthode dans notre classe :
protected function _initRoutes()
{
$routeur = Zend_Controller_Front::getInstance()->getRouter();
$routeur->addRoute('register', new Zend_Controller_Router_Route_Static('register', array(
'module' => 'frontend',
'controller' => 'users',
'action' =>'register'))
);
return $routeur;
}
De cette fâçon, nous allons pouvoir changer les adresses de nos actions simplement grâce au routing.
Dans cet épisode, nous avons vu comment il est simple, avec le Zend Framework, de gérer les routes et de créer des contrôleur.
Je vous rappel que vous pouvez me suggérer des articles ou des vidéos sur la page de suggestion.
Le prochain épisode ne sera malheureusement pas publié lundi prochain pour cause de vacances ! Le retour de la série est donc prévu pour le 3 août !
« Vacances | Tutorial : Créer une application avec le Zend Framework – #5 Le layout, les vues et les helpers »
Aucun trackback
7 commentaires
mi@ge
20 juillet 2009 à 13:12
1La partie 4 de cette comparaison entre les deux applications n’est pas très équitable, non?
Sur la ferme du web les notions de debug, de multimodules, et de routing. Ici on ne parle que du routing et de la notion de viewhelper qui n’est pas abordée sur la ferme du web.
DJo
20 juillet 2009 à 17:36
2@mi@ge: En effet, on était parti sur les contrôleurs / actions au début.
Moi j’ai un peu dérivé avec la toolbar de debug.
Le comparatif sera fait avec le prochain, les deux frameworks ne sont pas les même, mais on fera plus synchro la prochaine
Telia
2 août 2009 à 10:59
3Dans vos articles, pourriez-vous faire attention à l’infinitif ?
Un truc ; pour savoir quand il faut dire « de gérer les routes…» avec [er] pour le mot gérer ; remplacer le mot par « prendre» ou « courir» .
Avec ce moyen vous ne raterez plus vos infinitifs !
ziclo
20 novembre 2009 à 17:32
4Bonsoir,
J’ai essayé le routing, je n’arrive pas à le faire fonctionner. J’ai suivi le tutoriel en indiquant une route dans le bootstrap directement et en utilisant un fichier de routes « routes.ini» mais cela ne change rien. Y a t’il un ou des parametres essentiels à configurer pour activer le routing ? Sur apache, le module rewrite est actif.
Je ne vois pas ce qui bloque.
Avez vous des idées, points evidents par lesquels vous etes passés avant de faire faire fonctionner le routing ?
Merci
Clément
21 novembre 2009 à 17:42
5@ziclo: Non rien … avant de faire fonctionner, j’ai télécharger MAMP et j’ai lancer l’application … mod_rewrite étant installé … je ne vois pas . Peux tu me montrer ton code ? Merci:)
@Telia: Yep ! Désolé
ziclo
23 novembre 2009 à 10:11
6Merci quand même. Encore une question :
Je cherche à router l’url : « basepath/index/cabinet» vers « basepath/cabinet» . Zend indiquant « index» à
chaque fois, chose que je veux éviter.
Les codes de mon « boostrap» et du « routes.ini» sont les suivants :
/*BOOTSTRAP*/
protected function _initRouter(){
/*$this->bootstrap(’frontController’);
$front = $this->getResource(’frontController’);
$router = $front->getRouter();*/
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . ‘/configs/routes.ini’, ‘routes’), ‘routes’);
/*return $router;*/
}
/*routes.ini*/
[routes]
routes.index.type = « Zend_Controller_Router_Route_Static»
routes.index.route = « allelouia»
routes.index.defaults.controller = « index»
routes.index.defaults.action = « about»
Avec ce code ça ne fonctionne pas. Une idée ?
Ariden
5 septembre 2010 à 19:07
7Bonjour, c’est dommage de ne pas avoir préciser que pour le helper on pouvait récupérer la valeur $this->view->messages via $this->messages[N-1] dans la vue.
Merci pour ce tuto
Laisser un commentaire
Devenir Fan de Dator.fr
Nuage de tags
Sponsors
Blogoliste
Blogs Amis
Derniers Posts
Derniers Commentaires
Les meilleurs sujets
Propulsé par WordPress