Une approche de Zend Framework 1.7

Une approche de Zend Framework 1.7

sommaire :

  1. Ce qu’il faut
  2. Arborescence
  3. Strucuture MVC
 

Zend fait parti de ces frameworks qui font beaucoup parler d’eux. Pour les néophytes ce n’est pas toujours évident de mettre en place et d’utiliser ce framework. Sans entrer dans les détails nous allons voir comment installer la dernière version en ligne de zend, la 1.7.

Ce qu’il faut

Si vous le savez pas, il faut php5 et activé le module_rewrite

zend

zend

Et on télécharge la dernière version.

On va créer notre dossier zenfacile où seront enregistrées les pages. Dans ce dossier on va créer un dossier Zend. Dans ce dossier on va mettre la librairie Zend.

zend

Arborescence

L’arborescence de notre site va suivre une structure MVC traditionnel :
zend

Comme on va faire de la réécriture d’url, on va ajouter un fichier .htaccess

# Règles de réécriture pour Zend Framework
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

# Sécurité : Ne pas autoriser le parcours de répertoires
Options -Indexes

# Configuration PHP
php_flag magic_quotes_gpc off
php_flag register_globals off
php_flag short_open_tag on

voici le fichier .htaccess

Maintenant tout est prêt, on va pouvoir s’attaquer au php.
(eh oui ça va très vite on y va pas avec de la dentelle) :)

On va commencer par l’index.php

On va pas se précipiter, on va déjà voir si la librairie est bien chargé :

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/Paris');

// mise en place des répertoires et chargement des classes
set_include_path('.'
    . PATH_SEPARATOR . './library'
    . PATH_SEPARATOR . './application/models/'
    . PATH_SEPARATOR . get_include_path());
include "Zend/Loader.php";

echo 'salut Zend !';

Le message salut Zend ! devrait s’afficher sur cette page :http://localhost/zenfacile

C’est bon ? :)

Voici ce que l’on va mettre :

<?php

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/Paris');

// mise en place des répertoires et chargement des classes
set_include_path('.'
    . PATH_SEPARATOR . './library'
    . PATH_SEPARATOR . './application/models/'
    . PATH_SEPARATOR . get_include_path());
include "Zend/Loader.php";

Zend_Loader::registerAutoload();

// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./application/controllers');

// run!
$frontController->dispatch();
?>

Normalement vous avez une belle fatal erreur :


Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (index)’ in C:\wamp\www\zenfacile\Zend\Controller\Dispatcher\Standard.php:241
Stack trace:#0 C:\wamp\www\zenfacile\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\wamp\www\zenfacile\index.php(23): Zend_Controller_Front->dispatch() #2 {main}
thrown in C:\wamp\www\zenfacile\Zend\Controller\Dispatcher\Standard.php on line 241


Pas de panique c’est normal :) . Par défaut Zend recherche le contrôleur Index.

Et comme il n’existe pas, Zend nous génère une erreur.

Strucuture MVC

On va créer ce controleur :


zenfacile => application => controllers => IndexControler.php


Le nom de la classe doit forcément ce terminer par Controller

class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	 $this->view->title = "Mon Zend";
    }
}

Il faut savoir que dans chaque controleur il y a des actions (qui est en fait des méthodes de la classe).
Ces méthodes actions doivent se terminer par Action.
Ainsi pour l’action Index la méthode l’appellera indexAction.

L’objet $this->view est l’objet qui manipule la vue.

Comme vous l’avez remarquez notre classe hérite de Zend_Controller_Action.

Comment fait-on pour retrouver cette classe ?

Facile ! On remplace les _ par les / . Et voilà, on a l’arborescence et le nom de la classe.
Pour Zend_Controller_Action la classe se situeras dans :
Zend => Controller =>Action.php

La vue

Pour la vue, il faut aller dans le dossier views créer un dossier scripts.
Un fois ceci fait nous allons créer un dossier qui porte le nom du contrôleur. Le nom de notre vue sera alors index.

Le nom de la vue doit être le nom de l’action, son nom sera alors index.phtml


zenfacile => application => views => scripts => index => index.phtml


<html>
<head>
	<title><?php echo $this->escape($this->title); ?></title>
</head>
<body>
	<h1><?php echo $this->escape($this->title); ?></h1>
</body>
</html>

et là on rafraichit

on voit le message ! c’est que ça marche \o/

Pour la réécriture d’url zend fait vraiment simple. c’est http://lenomdusite/controleur/action. :)
On va créer une autre page, une page contact (elle aussi sera toute simple)

    function contactAction()
    {
    	 $this->view->title = "Contact";
    }

Avec une vue identique :


zenfacile => application => views => scripts => index => contact.phtml


<html>
<head>
	<title><?php echo $this->escape($this->title); ?></title>
</head>
<body>
	<h1><?php echo $this->escape($this->title); ?></h1>
</body>
</html>

Pour y accéder ça sera : http://localhost/zenfacile/index/contact

Et voila notre Zend est installé, pour ne pas trop alourdir le tutoriel, j’ai fait l’impasse sur des notions importantes comme le MVC, si vous avez des questions n’hésitez pas à poster un commentaire.

Voici le dossier complet : zenfacile

Note de l'article




1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, moyenne: 4,00 max : 5)
Loading ... Loading ...

  1. Yann Says:

    Ce Tuto nous reconcilie avec Zend et donne une approche simple
    d’un FrameWork qui semble trés compliqué au début notamment quand on veut l’installer, grâce à votre exemple et vos indications l’installation se fait sans aucun problème en quelques secondes !

  2. David Says:

    Salut,
    c’est super, une approche simple et efficace, Bravo !!
    Aussi j’aimerais avoir plus de détails sur le fonctionnement de « set_include_path »?
    j’utilise le ini_set(‘include_path’,’../application’)mais je n’arrive pas à faire fonctionner le model (tuto suivant).

    Merci d’avance

  3. passepied Says:

    Pour que ça marche avec 1.8, j’ai changé les lignes :
    include « Zend/Loader.php »;
    Zend_Loader::registerAutoload(); //->deprecated
    par :
    require_once ‘Zend/Loader/Autoloader.php’;
    Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);

  4. passepied Says:

    J’ai une tête de déprimé avec cet avatar aléatoire, didiou!

  5. mirc0s Says:

    Bonjour,
    merci pour le tuto

    zenfacile => application => controllers => IndexControler.php
    zenfacile => application => controllers => IndexController.php

  6. Drissa COULIBALY Says:

    Félicitations M. le Pédagogue!
    J’ai bien avancé en moins de 5mn

Donner votre avis :