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.
// 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
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.
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...)
Références
Quelques liens utiles pour aller plus loin :
- Le site de Zend sur le zend framework
- Page d'accueil de wamp serveur
Ajoutez vos propres commentaires :
