Navigation

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

Par Philippe Le Van (@plv) Dernière mise à jour : 08 April 2008

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 :

Commentaires

Ajouter un commentaire
est-ce que qlq1 peut m'aider, quand je fais localhost/nomprojet/public :( , reponse toujours erreur, le dossier public est caché
Excellent !
Je connais bien PHP mais je suis un débutant absolu de ZEND et j'ai a-do-ré votre tuto.
J'ai réussi à faire marcher la page de test et surtout à comprendre le fonctionnement en même temps.
Il y a juste ce qu'il faut d'indications : ça va à l'essentiel.
Maintenant il me faut pratiquer.
Parfait, merci encore.