Versions
- 8 avril 2008 : adaptation ZF 1.5.1 (ajout loadClass)
- 31 octobre 2007 : simplification du index.php
- 3 juillet 2007 : adaptation 1.0.0 stable
- 15 juin 2007 : adaptation au 1.0.0-RC2 et au ViewRenderer
- 2 juin 2007 : adaptation partielle 1.0.0-RC1
- 11 mai 2007 : adaptation ZF 0.9.3
- 5 avril 2007 : constante BASE_URL ajoutée + utilisation de PATH_SEPARATOR
- 4 avril 2007 : corrections suite aux remarques de dinoxyz
- 31 mars 2007 : clarification de l'installation du ZF
- 19 mars 2007 : adaptation ZF 0.9.0
- 23 fev 207 : adaptation ZF 0.8.0 (rewriteRouter)
- 12 fev 2007 : ajout throwExceptions
- 19 jan 2007 : adaptation ZF 0.7.0 (pas d'évolution)
- 2 jan 2007 : adaptation au ZF 0.6.0
- 2 nov 2006 : adaptation ZF 0.2.0 (new RewriteRouter)
- 13 juillet 2006 : Adaptation ZF 0.1.5 + RewriteRouter
- 3 juillet 2006 : Adaptation ZF 0.1.4
- 28 juin 2006 : création
Contactez-nous
Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81
Initiation au Zend Framework 1.5.x
Objectif du tutorial
Ce tutorial a pour vocation de donner un avant goût du framework. De nombreuses fonctions ne sont pas décrites (de nouveaux tutoriaux devraient suivre celui là). J'espère qu'il sera suffisamment simple et pragmatique pour vous aider à démarrer rapidement.
Le tutorial est fait pour un utilisateur de wamp serveur, mais peut-être facilement adapté à n'importe quelle config apache-php. (Note : wamp server est un outil sous windows qui permet d'installer très facilement apache, php et mysql)
Ce tutoriel vient d'être réécrit pour coller à l'esprit du Zend Framework depuis la version 1.0.0-RC1. Il utilise notamment le ViewRenderer.
N'hésitez pas à me signaler des erreurs ou des points peu clairs.
Restez informés de l'actualité du Zend Framework en vous rendant sur la communauté française du Zend Framework http://www.z-f.fr
Configurer le .htaccess
à la racine de votre site (au même niveau que index.php) créer un fichier .htaccess qui contient les 2 lignes suivantes ci-dessous.
Explication : ces lignes font des réécritures d'URL. Quand l'internaute va demander une page du type http://localhost/Tutoriaux/news , l'internaute est automatique redirigé vers index.php, sauf si le fichier demandé est de type .js, .ico,...
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Créer le fichier index.php
Ce fichier est central. Il faut bien le comprendre, c'est lui qui va indiquer les répertoires utilisés par votre site au framework.
Dans un premier temps lisez le rapidement et passez aux étapes suivantes. vous verrez que les étapes suivantes sont liées à ce code.
<?php // mettre vos constantes ici... define("WEBAPP_DIR","C:/users/levan/_boulot/eclipse/Tutoriaux"); define("MODEL_DIR",WEBAPP_DIR."/PHP-INF"); define("ROOT_URL","http://localhost/Tutoriaux"); define("BASE_URL","/Tutoriaux/"); define("ZEND_FRAMEWORK_DIR","C:/phplib/ZendFramework/library"); set_include_path( ".".PATH_SEPARATOR. MODEL_DIR.PATH_SEPARATOR. ZEND_FRAMEWORK_DIR.PATH_SEPARATOR. get_include_path() ); require_once 'Zend/Loader.php'; // Registry init Zend_Loader::loadClass("Zend_Registry"); // Controller init Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Controller_Router_Rewrite'); $controller = Zend_Controller_Front::getInstance(); $controller->setBaseUrl(BASE_URL); $controller->setControllerDirectory('PHP-INF/ctrl'); $controller->throwExceptions(true); // init viewRenderer Zend_Loader::loadClass("Zend_View"); $view = new Zend_View(); $viewRenderer = Zend_Controller_Action_HelperBroker:: getStaticHelper('viewRenderer'); $viewRenderer->setView($view) ->setViewSuffix('phtml'); // call dispatcher $controller->dispatch(); ?>
Installer le Zend Framework
Pas d'installation à propremement parler, il suffit de télécharger le framework à l'adresse http://framework.zend.com/download/stable
Il faut ensuite décompresser le fichier dans le bon répertoire. Dans l'exemple ci-dessous, l'archive est décompressée dans C:\phplib\ZendFramework. Dans ce répertoire vous devez trouver un répertoire "library". Il faut ensuite faire pointer la constante ZEND_FRAMEWORK_DIR dans le répertoire C:\phplib\ZendFramework\library.
Créer l'arborescence de votre site
La racine de votre site est imposée dans votre fichier index.php (le WEBAPP_DIR). Pour l'instant il n'y a rien d'autre dedans que le fichier index.php.
créez l'arborescence suivante :
WEBAPP_DIR index.php (fichier) PHP-INF (répertoire) views (répertoire) scripts (répertoire) index (répertoire) filters (répertoire inutilisé) helpers (répertoire inutilisé) ctrl (répertoire)
Les répertoires filters et helpers ne sont pas utilisés dans ce tutoriel, mais ils font partie de l'arborescence standard d'un projet ZF.
création du IndexController.php
Nous avons utilisé la classe Router_Rewrite dans index.php. Nous verrons dans un prochain tutorial comment configurer ce router pour qu'il fasse ce qu'on veut. Voilà son fonctionnement par défaut.
Suivant la forme de l'URL demandée par l'internaute, le ZendFramework va choisir le fichier à lancer.
- Si l'URL est http://localhost/zendSite/test/affiche
- le framework va chercher dans ctrl/ le fichier TestController.php et appelle l'action AfficheAction()
- Si l'URL est http://localhost/zendSite/test
- le framework va chercher dans ctrl/ le fichier TestController.php et appelle l'action IndexAction() (action par défaut)
- Si l'URL est http://localhost/zendSite
- le framework va chercher dans ctrl/ le fichier IndexController.php (le controller par défaut) et appelle l'action IndexAction() (l'action par défaut)
la fonction IndexAction() de la classe IndexController est donc la fonction par défaut appelée quand l'internaute appelle la page d'accueil du site.
Ci dessous un exemple simple de IndexController.php
<?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { $this->view->testMessage = "Mon message de test"; } } ?>
création du index.phtml
Le fichier index.phtml est dans le répertoire WEBAPP_DIR/PHP-INF/views/scripts/index/.
Dans l'arborescence standard du Zend Framework, le répertoire views est au même niveau que le répertoire du controlleur. Ensuite dans ce répertoire views, on trouve 3 sous répertoires
- scripts : contient les vues elles même
- helpers : contient les helpers. Nous n'en parlerons pas ici.
- filters : contient les filtres. Nous n'en parlerons pas ici.
Pour retrouver la bonne vue, le Zend Framework cherche dans views/scripts. Ensuite il regarde le nom du controller (IndexController => cherche le répertoire index) et le nom de l'action appelée (IndexAction => cherche le fichier index.phtml). L'extension phtml était définie dans index.php.
Voilà un exemple ci-dessous :
index.phtml
<html> <head> <title>Tutoriaux Kitpages</title> </head> <body> Si vous voyez cette page et le message en dessous, c'est que tout va bien...<br/> message = <?php echo $this->testMessage; ?> </body> </html>
Lancer l'application
Normalement, il vous suffit d'aller à l'URL
http://localhost/Tutoriaux
Vous devez voir apparaître la page index.phtml
Que s'est-il passé étape par étape ?
Les étapes suivies par le framework sont détaillées ici.
- l'internaute a été redirigé vers index.php par la configuration apache
- fonctionnement de index.php
- index.php a inclu Zend_Loader.php pour avoir accès à l'ensemble des fonctions du framework
- index.php a créé une instance de controlleur (classe servant à gérer la navigation du site)
- index.php dit au router quelle est l'URL de base (pour http://localhost/Tutoriaux, c'est "/Tutoriaux/")
- index.php a dit au controller d'utiliser le Router_Rewrite créé
- index.php indique le l'extention des vues à utiliser. Il retrouve les bonnes vues grace à l'organisation standard des répertoires du Zend Framework
- index.php a appelé $controller->dispatch() pour lancer le framework réellement
- le framework a regardé la forme de l'URL. L'URL standard est des la forme http://localhost/Tutoriaux/controller/action .
- Aucun controller n'est spécifié, le Zend Framework utilise donc le controller par défaut, c'est à dire IndexController.php
- Aucune action n'est spéficiée => dans IndexController, le Zend Framework appelle l'action par défaut : la méthode indexAction()
- indexAction définit une variable dans la vue à utiliser.
- le Zend Framework retrouve la bonne vue (dans views/scripts/controller/action.phtml) et l'affiche)
Félicitation ! vous êtes arrivés au bout du tutorial !
Pour creuser un peu plus, rendez-vous sur le "Zend Framework Tutorial"
Problèmes rencontrés
- J'ai une erreur 404 (not found)
- Votre configuration apache n'est pas bonne. Si vous avez décidé de mettre votre application dans .../htdocs/test/tutoriaux, vérifiez que vous avez:
- RewriteBase /test/tutoriaux
- RewriteRule . /test/tutoriaux/index.php [L]
- explication : avec la bonne configuration apache, il n'est pas possible d'avoir une erreur 404. Dès que apache ne trouve pas le fichier, il rebalance vers index.php...
- Failed opening required 'Zend/Exception.php'
- Vérifiez que le chemins sont bons, notamment pour la constante ZEND_FRAMEWORK_DIR
- Zend_Controller_Dispatcher_Exception: Invalid controller specified (index)
- Vérifiez que le chemin dans BASE_URL est bon
- Vérifiez le nom de la classe (IndexController)
- Vérifiez que le fichiez IndexController est dans le bon répertoire (spécifié par la commande setControllerDirectory dans index.php)
- Vérifiez que le nom de fichier est bon (IndexController.php)
- Vérifiez que les majuscules et les minuscules sont bonnes dans le nom de la classe et dans le nom du fichier (class IndexController extends...)
- j'ai une erreur quand je tape : http://localhost/Tutoriaux/index.php
- C'est normal : quand on tape http://localhost/Tutoriaux/toto/titi, le ZF cherche un controlleur TotoController et une action TitiAction pour lancer son traitement. Si on ne met rien par défaut, le ZF considère qu'on a tapé http://localhost/Tutoriaux/index/index
- Si on tape http://localhost/Tutoriaux/index.php, le ZF cherche un controlleur du type Index.phpController, qui n'est pas défini (d'ailleurs la syntaxe n'aurait pas de sens...)
N'hésitez pas à me signaler d'autres problèmes, je les ajouterai dans cette liste.
Références
Quelques liens utiles pour aller plus loin :
- Le site de Zend sur le Zend Framework : http://framework.zend.com
- La communauté francophone du Zend Framework : http://www.z-f.fr
Commentaires
Ajouter un commentaire