Zend Framework tutoriel pour les débutants
Date de publication : 08 Octobre 2009
Par
helmi dridi
Ce tutoriel est une introduction pour une prise en main rapide de Zend Framework en MVC, j'ai abordé les étapes minimales pour que vous puissiez acquérir ensuite les étapes nécessaires.
I. Public concerné
II. Arborescence
III. Fichier d'amorçage
IV. Architecture MVC
IV-A. Le Contrôleur
IV-B. La Vue
IV-C. Le Model
V. Conclusion
V-A. Remerciment
I. Public concerné
Ce tutoriel s'adresse aux débutants souhaitant s'initier à Zend Framework, mais connaissant déjà
la notion MVC dans la théorie ou la pratique sur une autre technologie. Pour ce qui est de Zend Framework
vous pouvez lire la
Présentation
ZF de
julien-pauli, ainsi que le tutoriel du même auteur concernant le
pattern
MVC.
II. Arborescence
On commence tout d'abord par créer l'architecture de notre projet soit la suivante :
III. Fichier d'amorçage
Dans le répertoire
library on télécharge et on copie la librairie Zend Framework depuis l'adresse
suivante :
http://www.zend.com/en/community/downloads.
Puis on crée le fichier d'amorçage index.php, dans le répertoire racine "www" pour amorcer Zend_Controller_Front.
Le fichier d'amorçage est la page vers laquelle toutes les demandes sont dirigées "www/index.php"
celui-ci va instancier et distribuer le contrôleur frontal, qui conduira les demandes vers les contrôleurs
d'action.
Les commentaires des différentes lignes expliquent la démarche à suivre.
| index.php |
<?php
define ( 'APPLICATION_PATH', realpath ( dirname ( __FILE__ ) . '/../' ) );
$library = APPLICATION_PATH. '/library';
set_include_path ($library . PATH_SEPARATOR . get_include_path ());
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('App_');
Zend_Loader::loadClass ( 'Zend_Controller_Front' );
try {
$front = Zend_Controller_Front::getInstance();
$front->throwExceptions(true);
$front->setControllerDirectory(APPLICATION_PATH . '/application/controllers');
$front->dispatch();
} catch (Zend_Controller_Exception $e) {
include 'errors/404.phtml';
} catch (Exception $e) {
include 'errors/500.phtml';
}
?>
|
Afin de gérer correctement l'affichage des erreurs on crée les fichiers 404.phtml et 505.phtml dans
le répertoire "errors" et on affiche les messages d'erreurs appropriés.
 |
Le contrôleur frontal : Zend_Controller_Front implémente un motif de contrôleur frontal utilisé dans
les applications Modèle-Vue-Contrôleur (MVC). Son but est d'initialiser l'environnement de requête,
d'acheminer la requête entrante et de distribuer ensuite n'importe quelles actions découvertes, il
agrège n'importe quelles réponses et les retourne quand le processus est complet.
|
IV. Architecture MVC
IV-A. Le Contrôleur
On commence par créer un fichier PHP nommé "IndexController.php".
Remarquons bien que le nom est divisé par 2 IndexController :
-
Index (on le nomme ainsi puisque c'est la page principale de notre application qui est nommée index).
-
Controller (on le nomme ainsi puisque c'est un contrôleur).
| IndexController.php |
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
}
}
?>
|
À ce stade on a donc le schéma suivant :
IV-B. La Vue
Maintenant qu'on a créé le contrôleur on passe à la vue (view).
Sous le répertoire /views on crée le répertoire "scripts" puis on crée un autre répertoire index
(views/scripts/index), en dernier on crée le fichier index.phtml.
On remarque qu'il y a le nom index qui se répète :
-
IndexController.php
-
views/scripts/index
-
views/scripts/index/index.phtml
| index.phtml |
<?php
echo 'Mes premiers pas vers Zend Framework' ;
?>
|
IV-C. Le Model
On commence par créer une base nommée "zftutdebutant" et une table "utilisateurs"
CREATE TABLE IF NOT EXISTS `utilisateurs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
INSERT INTO `utilisateurs` (`id`, `nom`, `age`) VALUES
(1, 'Timmy Mellowman', 23),
(2, 'Sandy Smith', 21),
(3, 'Bobby Wallace', 15);
|
Il y a plusieurs façons d'implémenter la connexion à la base, dans ce tutoriel j'ai abordé la connexion à travers
un fichier ini mais il est possible de faire différemment. Sous le répertoire "www" on
crée un répertoire "config" sous ce même répertoire on crée le fichier "config.ini" (/www/config/config.ini).
| config.ini |
[dev]
database.adapter = pdo_mysql
database.params.host = 127.0.0.1
database.params.username = root
database.params.password =
database.params.dbname = ZfTutDebutant
|
On doit configurer la connexion dans le fichier d'amorçage, donc il faut rajouter ce bloc dans le fichier
index.php juste avant le try.
| index.php |
<?php
$configPath = '../www/config/config.ini';
$config = new Zend_Config_Ini ( $configPath, 'dev' );
$db = Zend_Db::factory ( $config->database );
$db->getConnection ();
Zend_Registry::set ( 'db', $db );
Zend_Db_Table::setDefaultAdapter ( $db );
?>
|
Notre fichier index devient le suivant :
| index.php |
<?php
define ( 'APPLICATION_PATH', realpath ( dirname ( __FILE__ ) . '/../' ) );
$library = APPLICATION_PATH. '/library';
set_include_path ($library . PATH_SEPARATOR . get_include_path ());
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('App_');
$configPath = '../www/config/config.ini';
$config = new Zend_Config_Ini ( $configPath, 'dev' );
$db = Zend_Db::factory ( $config->database );
$db->getConnection ();
Zend_Registry::set ( 'db', $db );
Zend_Db_Table::setDefaultAdapter ( $db );
try {
$front = Zend_Controller_Front::getInstance();
$front->throwExceptions(true);
$front->setControllerDirectory(APPLICATION_PATH . '/application/controllers');
$front->dispatch();
} catch (Zend_Controller_Exception $e) {
include 'errors/404.phtml';
} catch (Exception $e) {
include 'errors/500.phtml';
}
?>
|
Puis on crée la classe qui va interroger la base et nous acheminer le résultat au sein du contrôleur,
sous le répertoire models il faut créer le fichier "Utilisateurs.php" :
| Utilisateurs.php |
<?php
require_once 'Zend/Db/Table/Abstract.php';
class Utilisateurs extends Zend_Db_Table_Abstract
{
protected $_name = 'utilisateurs';
}
?>
|
zend_Db_Table_Abstract est comme son nom l'indique une classe abstraite. Elle représente au sens large
une table d'une base de données.
Utilisateurs extends Zend_Db_Table_Abstract la définition de cette classe prendra en charge
toutes les caractéristiques de la table Utilisateurs et on fera ainsi pour toutes les tables de la
base que l'on veut représenter.
Pour récupérer nos données dans le fichier "IndexController.php" il faut cependant insérer les lignes
suivantes au sein du fichier IndexController.php
| IndexController.php |
<?php
require_once '../application/models/Utilisateurs.php';
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$user = new Utilisateurs ;
$this->view->user = $user->fetchall()->toArray();
}
}
?>
|
Enfin dans notre fichier index.phtml on affiche nos données
| index.phtml |
<?php
?>
<table>
<tr>
<th>Nom</th>
<th>Age</th>
</tr>
<?php foreach ($this->user as $key => $val): ?>
<tr>
<td><?php echo $this->escape($val['nom']) ?></td>
<td><?php echo $this->escape($val['age']) ?></td>
</tr>
<?php endforeach; ?>
</table>
|
Résultat :
V. Conclusion
Ce tutoriel s'adresse aux débutants souhaitant avoir une prise en main facile, rapide ainsi qu'une familiarisation
avec Zend Framework. Pour avancer avec d'autres composants et les méthodes d'implémentation vous
pouvez consultez le
site officiel.
V-A. Remerciment
Je tiens à remercier infiniment
Yogui pour ses conseils et
mlny84 pour sa relecture.

