Logo classes.scriptsphp.org PHP

go to nav bar

Introduction au Zend Framework - part I

Date :: 2006-03-10
Last Updated :: 2006-03-19


Introduction

Un framework ? késako ?

Fin février 2006 Zend a lancé son framework en version bêta. Il propose déjà quelques fonctionnalités intéressantes, comme un module d'abstraction de bases de données (basé sur PDO), la génération de document PDF en pur PHP ou encore l'interrogation de différents services web comme Yahoo, Amazon ou Flickr (d'autres comme Google devraient s'y greffer sous peu). Il propose également quelques autres modules plus basiques, tels que la récupération de flux XML de syndication (RSS et Atom), un filtre, un client HTTP, un module d'envoi d'email ou encore un module de logs.

La fonctionnalité la plus intéressante, à mon sens, est l'implémentation du design pattern (ou Motif de conception) MVC, détaillé dans la seconde partie de l'article.

Installation

Il n'y a pas d'installation à proprement parler, il suffit de télécharger le framework, de le décompresser dans le répertoire de votre choix et ... de l'utiliser. A l'heure actuelle, et même si les discussions font rage sur la liste de discussion, il n'est pas encore prévu de "configuration".

Notions de base

L'utilisation du framework nécessite l'inclusion d'un seul fichier : Zend.php. Le nommage des classes et des fichiers étant uniforme, ce fichier contient donc la classe Zend et est le seul situé à la racine du projet.
Tous les modules sont situés dans le répertoire Zend/ et portent le nom du module : ainsi le module Pdf (par exemple) est localisé dans Zend/Pdf.php et contient la classe Zend_Pdf. Voici un exemple permettant de charger les modules Pdf et Db.

<?php 

// Inclusion du fichier de base
require_once 'Zend.php';

// Chargement du module Pdf
Zend::loadClass('Zend_Pdf');


// Chargement du module d'abstraction de bases de données
Zend::loadClass('Zend_Db');

?>

Chaque module dispose de son propre répertoire où sont localisées ses dépendances. Par exemple, le module Db situé dans Zend/, dispose d'un répertoire nommé Db (Zend/Db/) contenant ses dépendances. On y trouvera par exemple un fichier nommé Select.php (Zend/Db/Select.php) qui contient la classe Zend_Db_Select.

Pour chaque erreur, une exception est levée, et chaque module dispose dans son répertoire de son propre gestionnaire nommé Exception.php. Ainsi, on retrouve par exemple une classe Zend_Db_Exception localisée dans le fichier Zend/Db/Exception.php. Cette classe étend (extends) les fonctionnalités de la classe Zend_Exception, qui étend elle-même les fonctionnalités de la classe native de PHP, Exception. Exemple :

<?php 

// Inclusion du fichier de base
require_once 'Zend.php';

// Chargement du module d'envoi d'email
Zend::loadClass('Zend_Mail');

try {
    
$mail = new Zend_Mail();
    
    
// suite du code
    
} catch(Zend_Mail_Exception $e) {
    echo 
$e->getTrace();
}

?>

La classe Zend

La classe Zend fournit différentes méthodes afin notamment de charger des fichiers, des classes, des interfaces. Cette classe n'est pas directement instanciable et dispose uniquement de méthodes statiques et publiques. En voici la liste, leur nom est assez explicite :

  • Zend::loadClass : Charge une classe
  • Zend::loadFile : Charge un fichier
  • Zend::loadInterface : Charge une interface
  • Zend::register : Enregistre un objet en mémoire
  • Zend::registry : Récupère un objet de la mémoire
  • Zend::dump : var_dump() amélioré
  • Zend::isReadable : is_readable() amélioré tenant compte de l'include_path.

Par ailleurs, cette classe ne peut être étendue, elle est déclarée comme final.

Bases de données

L'utilisation du module d'abstraction de base de données utilise l'extension PDO, disponible par défaut depuis l'arrivée de PHP5.

Utilisation avec MySQL

Tout d'abord, voyons comment se passe la connexion à la base de données :

<?php 

require_once 'Zend.php';
Zend::loadClass('Zend_Db');

// paramètres de connexion à la base de données MySQL
$params = array (
'host'     => 'localhost',
'username' => 'plouf',
'password' => 'le_canard',
'dbname'   => 'grippe_aviaire'
);

// Utilisation du driver PDO::mysql pour la connexion
$db Zend_Db::factory('pdoMysql'$params);

?>

Envoyons maintenant une requête et récupèrons le résultat :

<?php 

require_once 'Zend.php';
Zend::loadClass('Zend_Db');

// paramètres de connexion à la base de données MySQL
$params = array (
'host'     => 'localhost',
'username' => 'plouf',
'password' => 'le_canard',
'dbname'   => 'grippe_aviaire'
);

// Utilisation du driver PDO::mysql pour la connexion
$db Zend_Db::factory('pdoMysql'$params);

$result $db->fetchAll'SELECT name FROM exemple' );

?>

Utilisation avec SQLite

Nous allons, par exemple, récupérer la liste des tables d'une base de données SQLite. Pour effectuer cette tâche, une méthode existe, Zend_Db::listTables() :

<?php

require_once 'Zend.php';
Zend::loadClass('Zend_Db');

$params = array ('dbname' => 'phpwg_');

$db Zend_Db::factory('pdoSqlite'$params);

$result $db->listTables();

print_r($result);

?>

De la même manière, et pour chaque type de base de données, vous disposez également d'une méthode Zend_Db::describeTable() qui prend comme unique paramètre, le nom de la table.

Syndication

Le Zend Framework intègre également un module destiné à récupérer le contenu de fil RSS ou Atom. Voici deux exemples :

Parser un fil RSS

<?php
header
("Content-type: text/html; charset=UTF-8");

require_once 
'Zend.php';
Zend::loadClass('Zend_Feed');

/* @var $feed Zend_Feed */
$feed Zend_Feed::import('http://classes.scriptsphp.org/filrss');

echo 
'<ul>';

foreach (
$feed->items as $item) {
    echo 
'<li>';
    echo 
'<h2><a href="' $item->link() , '">'$item->title() , '</a></h2>';
    echo 
'<p>' $item->description() , '</p>';
    echo 
'</li>';
}
echo 
'</ul>';

Parser un fil Atom

<?php
header
("Content-type: text/html; charset=UTF-8");

require_once 
'Zend.php';
Zend::loadClass('Zend_Feed');

/* @var $feed Zend_Feed */
$feed Zend_Feed::import('http://classes.scriptsphp.org/filatom');

echo 
'<ul>';

foreach (
$feed->items as $item) {
    echo 
'<li>';
    echo 
'<h2><a href="' $item->link() , '">'$item->title() , '</a></h2>';
    echo  
$item->content();
    echo 
'</li>';
}
echo 
'</ul>';

PDF

Création d'un document PDF

Un module écrit en pur PHP permettant de générer des documents au format PDF est également inclus dans le framework. Si vous avez l'habitude de travailler avec FPDF, l'utilisation ne vous posera pas de souci majeur :

<?php 

require_once 'Zend.php';
Zend::loadClass('Zend_Pdf');

$pdf = new Zend_Pdf();

// Nouvelle page format A4 
$page $pdf->newPage(Zend_Pdf_Const::PAGESIZE_A4);

// Ajout de la police Helvetica de taille 12
$font = new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_HELVETICA);
$page->setFont($font12);

// du texte
$page->drawText('plouf',0,0);

// Ajout de la page créée au document
$pdf->pages[] = $page;

header('Content-Type: application/pdf');
$pdf->save('page.pdf');

echo 
file_get_contents('page.pdf');
?>

Email

Exemple d'utilisation du module d'envoi d'email :

<?php
require_once 'Zend.php';
Zend::loadClass('Zend_Mail');

$mail = new Zend_Mail();

// Sujet du mail
$mail->setSubject('Petit bonjour');

// Corps du mail, au format HTML
$mail->setBodyHtml('<strong>Bonjour Plouf</strong> ...');
// Corps altérnatif, au format texte
$mail->setBodyText('Bonjour Plouf ...');

// Un fichier PDF en attachement
$mail->addAttachment('page.pdf');

// provenance du mail
$mail->setFrom('moi@monemail.com''Fab');

// Destinataire
$mail->addTo('plouf@le-cannard''Le cannard');

// Un destinataire en copie cachée
$mail->addBcc('canette@grippe-aviaire.fr''H5N1');

// Envoi du mail
$mail->send();

?> 

Services web

Autre

Il existe d'autres modules que nous n'avons pas détaillés ici, en voici une liste non exhaustive :

  • Json
  • HttpClient : client pour effectuer des requêtes HTTP
  • Search : Module d'indexation et de recherche sans base de données basé sur Lucene
  • Log :

Liens utiles

Conclusion

Ca vous donne envie ? alors, lisez la partie II ...

Trackback

Il n'y a pas de trackback recensé pour cet article.

Faire un trackback sur cet article http://classes.scriptsphp.org/Trackbackserver.Introduction-au-Zend-Framework-part-I, récupérer les trackback sur cet article

Merci de ne pas suivre ce lien emails.

0.0828s | «»
PHP powered