Академический Документы
Профессиональный Документы
Культура Документы
Ce tutoriel a t rdig pour vous prsenter Zend Framework 2 en crant une application
base sur une base de donnes basique et utilisant une conception Modle-Vue-Contrleur.
Aprs la lecture de ce document, vous aurez une application ZF2 fonctionnelle et vous
pourrez examiner le code pour en comprendre le fonctionnement et les mcanismes.
Note : ce tutoriel est bas sur la version beta 4 de Zend Framework 2. Il peut fonctionner
sur une version plus rcente, mais ne fonctionnera pas sur une version antrieure.
Cet article a t publi avec l'aimable autorisation de Rob Allen. L'article original peut tre
lu sur son site : http://akrabat.com/zend-framework-2-tutorial/.
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Prrequis...................................................................................................................................................................... 3
L'application du tutoriel................................................................................................................................................ 3
Dmarrage : l'application squelette..............................................................................................................................3
Dmarrer avec un fichier zip..................................................................................................................................4
Virtual host................................................................................................................................................................... 4
Modules........................................................................................................................................................................ 5
Configuration du module Album.................................................................................................................................. 5
Autochargement des fichiers..................................................................................................................................6
Configuration................................................................................................................................................................ 7
Informer l'application du nouveau module...................................................................................................................7
Les pages du site........................................................................................................................................................ 8
Crer le contrleur....................................................................................................................................................... 9
Initialiser les vues...................................................................................................................................................... 10
La base de donnes..................................................................................................................................................11
Les fichiers du modle.............................................................................................................................................. 11
Utiliser le ServiceManager pour configurer les identifiants de la base de donnes et le passer au contrleur......... 13
Lister les albums........................................................................................................................................................15
Les styles..............................................................................................................................................................17
Ajouter de nouveaux albums..................................................................................................................................... 17
diter un album..........................................................................................................................................................22
Supprimer un album.................................................................................................................................................. 23
Faire en sorte que la page d'accueil affiche la liste des albums.............................................................................. 25
Conclusion et remerciements.................................................................................................................................... 25
-2Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Prrequis
Ce tutoriel part du principe que vous utilisez PHP 5.3.10, avec un serveur Web Apache et une base de donnes
MySQL, accessible par l'extension PDO. Vous devez avoir install et activ l'extension mod_rewrite.
Vous devez galement vous assurer qu'Apache est configur pour supporter les fichiers .htaccess. Pour cela vous
pouvez changer la directive
AllowOverride None
en
AllowOverride All
dans votre fichier httpd.conf. Consultez la documentation de votre serveur Web pour plus de renseignements. Vous
ne pourrez naviguer sur aucune page, part la page d'accueil, si vous n'avez pas activ le mod_rewrite et bien
complt le fichier .htaccess.
L'application du tutoriel
Nous allons crer une application qui affichera un systme de gestion de nos albums. La page principale listera notre
collection d'albums et nous permettra d'en ajouter, de les diter et de supprimer des CD. Nous aurons besoin de
quatre pages sur le site :
Liste des albums
Ajout d'un nouvel album
dition d'un album
Suppression d'un album
Nous aurons galement besoin de stocker les donnes dans une base de donnes. Nous n'aurons besoin que d'une
table, avec ces colonnes :
Nom du champ
id
Type
integer
Null ?
Non
artist
title
varchar(100)
varchar(100)
Non
Non
Notes
Cl primaire, autoincrment
-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
depuis le rpertoire zf2-tutorial. Cela peut prendre un certain temps. Vous obtiendrez un rsultat ressemblant ceci :
Installing dependencies from lock file
- Installing zendframework/zendframework (dev-master)
Cloning cef2f9c90a9dc3fe3018b624ff9113666a397b73
Generating autoload files
Virtual host
Nous allons crer un virtual host Apache pour l'application, en ditant le fichier hosts pour que l'adresse http://zf2tutorial.localhost pointe sur le fichier index.php du rpertoire zf2-tutorial/public.
La configuration du virtual host est gnralement faite dans le fichier httpd.conf ou extra/httpd-vhosts.conf (si vous
utilisez httpd-vhosts.conf, assurez-vous que ce fichier est charg par le fichier principal httpd.conf).
Assurez-vous galement que NameVirtualHost est dfini "*:80" ou une configuration similaire, ensuite dfinissez
le virtual host ainsi :
<VirtualHost *:80>
ServerName zf2-tutorial.localhost
DocumentRoot /path/to/zf-2tutorial/public
SetEnv APPLICATION_ENV "development"
<Directory /path/to/zf2-tutorial/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Pensez mettre jour le fichier /etc/hosts ou c:\windows\system32\drivers\etc\hosts avec la relation zf2tutorial.localhost associe 127.0.0.1. Le site est alors accessible l'adresse http://zf2-tutorial.localhost.
Si vous n'avez pas fait d'erreur, vous devriez voir une page ressemblant celle-ci :
-4Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Pour vrifier que le fichier .htaccess fonctionne bien, allez la page http://zf2-tutorial.localhost/1234, vous devriez
voir ceci :
Si vous voyez l'erreur Apache 404, vous devez corriger le fichier .htaccess avant de poursuivre.
Vous avez dsormais une application squelette fonctionnelle, nous allons pouvoir nous occuper de notre application.
Modules
Zend Framework 2 utilise un systme de modules, o vous placez un code spcifique au module. Le module
Application du squelette est utilis pour fournir le bootstrap, la configuration des erreurs et du routage, toute
l'application. Il est gnralement utilis pour fournir les contrleurs de l'application, comme sa page d'accueil, mais
nous n'allons pas utiliser celui qui est fourni par dfaut dans l'application. Notre page listant les albums aura son
propre module.
Nous allons mettre tout notre code dans le module Album, qui contiendra nos contrleurs, nos modles, nos
formulaires, nos vues et les fichiers de configuration. Commenons par les rpertoires.
Comme vous pouvez le voir, le module Album a des rpertoires pour les diffrents types de fichiers. Les fichiers PHP
qui contiennent les classes du namespace Album sont dans le rpertoire src/Album ce qui permet d'avoir plusieurs
-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
espaces de nom dans ce module. Le rpertoire view a galement un sous-rpertoire nomm album pour les vues
du module.
Afin de charger et configurer un module, Zend Framework 2 a un ModuleManager. Celui-ci cherchera le fichier
Module.php la racine du rpertoire du module et s'attend y trouver une classe nomme Album\Module. La classe
d'un module donn aura l'espace de nom et le nom du module, cela sera galement le nom du rpertoire du module.
Crez le fichier Module.php dans le module Album :
module/Album/Module.php
<?php
namespace Album;
class Module
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
Avec un tableau vide, chaque fois que l'autoloader cherche une classe dans l'espace de nom Album, il retombera
sur le StandardAutoloader.
-6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Notez qu'en utilisant Composer en tant qu'alternative, vous ne pouvez pas implmenter
getAutoloaderConfig() et ajouter la place "Application": "module/Application/src" la cl
psr-0 du composer.json. Si vous prfrez cette faon de faire, vous devez lancer php
composer.phar update pour mettre jour les fichiers d'autochargement du composer.
Configuration
Aprs avoir configur l'autoloader, jetons un il la mthode getConfig() dans Album\Module. Cette mthode charge
seulement le fichier config/module.config.php.
Crez ce fichier de configuration dans le module Album :
module/Album/config/module.config.php
<?php
return array(
'controller' => array(
'classes' => array(
'album/album' => 'Album\Controller\AlbumController',
),
),
'view_manager' => array(
'template_path_stack' => array(
__DIR__ . '/../view',
),
),
);
Les informations de configuration sont transmises aux composants appropris par le ServiceManager. Nous avons
besoin de deux sections initiales : controller et view_manager. La section controller fournit une liste de tous les
contrleurs appels par le module. Nous n'aurons besoin que d'un contrleur, AlbumController, que nous nommons
album/album. Cette cl doit tre unique dans tous les modules, c'est pourquoi nous la prfixons avec le nom du
module.
Dans la section view_manager, nous ajoutons le rpertoire de la vue la cl TemplatePathStack. Ceci permettra de
trouver les scripts de vue du module Album qui sont stocks dans le rpertoire views/album.
<?php
return array(
'modules' => array(
'Application',
'Album',
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'config_cache_enabled' => false,
'cache_dir' => 'data/cache',
'module_paths' => array(
'./module',
'./vendor',
),
),
-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
config/application.config.php
);
Comme vous pouvez le voir, nous avons ajout notre module Album dans la liste des modules, aprs le module
Application. Nous pouvons dsormais crer notre code pour le module.
Avant de crer ces fichiers, il faut bien comprendre comment le framework gre l'organisation des pages. Chaque
page de l'application reprsente une action et les actions sont regroupes dans les contrleurs, eux-mmes dans
des modules. Par exemple, un contrleur actualites aurait des actions actuelles, archivees et vues
Nous avons donc quatre pages pour grer nos albums, nous allons les regrouper dans un seul contrleur nomm
AlbumController, lui-mme dans le module Album. Ce contrleur aura quatre actions, qui seront :
Page
Accueil
Ajouter un nouvel album
diter un album
Supprimer un album
Contrleur
AlbumController
AlbumController
AlbumController
AlbumController
Action
index
add
edit
delete
La cration de l'URL vers une action particulire est effectue en utilisant les routes dfinies dans le fichier
module.config.php du module. Nous allons ajouter une route pour toutes nos actions. Voici le fichier mis jour :
module/Album/config/module.config.php
<?php
return array(
'controller' => array(
'classes' => array(
'album/album' => 'Album\Controller\AlbumController',
),
),
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/album[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/config/module.config.php
),
);
),
),
),
'view_manager' => array(
'template_path_stack' => array(
__DIR__ . '/../view',
),
),
Le nom de la route est album et est form de segments, qui nous permettent de spcifier des zones de paramtres
dans l'URL, qui devront correspondre avec le nom des paramtres de la route. Dans notre cas, la route est /
album[/:action][/:id] et correspond n'importe quelle URL dmarrant par /album. Le segment suivant sera le nom
facultatif de l'action et le dernier segment correspond l'id, galement facultatif. Les crochets indiquent que le
segment est facultatif. Ces contraintes nous assurent que les caractres des segments correspondent un format
attendu. Nous forons le nom de l'action dmarrer par une lettre, suivie de caractres alphanumriques, de tirets
bas ( _ ) ou de tirets hauts ( - ) uniquement. Pour l'id, ce doit tre un nombre.
Cette route nous permet d'obtenir les URL suivantes :
URL
/album
/album/add
/album/edit/2
/album/delete/4
Page
Page d'accueil (liste des
albums)
Ajout d'un nouvel album
Edition de l'album ayant l'id 2
Suppression de l'album ayant
l'id 4
Action
index
add
edit
delete
Crer le contrleur
Nous sommes maintenant prts complter le contrleur. Avec Zend Framework 2, le contrleur est une classe
qui est gnralement appele {Controller name}Controller. Notez que {Controller name} doit commencer par une
majuscule. Cette classe doit tre place dans un fichier nomm {Controller name}Controller.php et tre dans le
rpertoire Controller du module. Dans notre cas le rpertoire est module/Album/src/Album/Controller. Chaque action
du contrleur doit tre une mthode publique et doit tre nomme {action name}Action. {action name} doit commencer
par une minuscule.
Ces rgles sont des conventions. Zend Framework 2 ne vous impose pas d'autre restriction que d'implmenter
l'interface Zend\Stdlib\Dispatchable. Le framework fournit deux classes abstraites qui font cela notre place : Zend
\Mvc\Controller\ActionController et Zend\Mvc\Controller\RestfulController. Nous utiliserons le contrleur standard
ActionController, mais si vous souhaitez utiliser un service Web RESTful, RestfulController vous sera plus utile.
Maintenant, crons notre contrleur :
module/Album/src/Album/Controller/AlbumController.php
<?php
namespace Album\Controller;
use Zend\Mvc\Controller\ActionController,
Zend\View\Model\ViewModel;
-9Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/src/Album/Controller/AlbumController.php
class AlbumController extends ActionController
{
public function indexAction()
{
}
public function addAction()
{
}
public function editAction()
{
}
public function deleteAction()
{
}
}
Notez que nous avons dj inform le module de l'existence du contrleur dans la section controller du fichier config/
module.config.php.
Nous avons dsormais dfini les actions que nous voulons utiliser. Elles ne fonctionneront pas tant que nous n'aurons
pas dfini les vues. Les URL de chaque action sont :
URL
http://zf2-tutorial.localhost/album
http://zf2-tutorial.localhost/album/add
http://zf2-tutorial.localhost/album/edit
http://zf2-tutorial.localhost/album/delete
Mthode appele
Album\Controller
\AlbumController::indexAction()
Album\Controller
\AlbumController::addAction()
Album\Controller
\AlbumController::editAction()
Album\Controller
\AlbumController::deleteAction()
Nous avons dsormais un routeur fonctionnel et les actions sont dfinies pour chaque page de notre application. Il
est temps de construire les vues et la couche du modle.
Module/Album/view/album/album/index.phtml ;
Module/Album/view/album/album/add.phtml ;
Module/Album/view/album/album/edit.phtml ;
Module/Album/view/album/album/delete.phtml.
Nous pouvons dsormais crer les donnes, en commenant par la base de donnes et les modles.
- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
La base de donnes
ce stade nous avons le module Album avec un contrleur, des actions, et des vues. Nous allons nous intresser
la partie des modles de notre application. Rappelez-vous que le modle est la partie qui communique avec le cur
de l'application (ce qu'on l'appelle gnralement les rgles mtier ) et, dans notre cas, les relations avec la base
de donnes. Nous allons utiliser la classe Zend\Db\TableGateway\TableGateway qui est utile pour trouver, insrer,
mettre jour et supprimer des lignes des tables d'une base de donnes.
Nous allons utiliser MySQL et son extension PDO pour crer une base de donnes nomme zf2tutorial et lancer ces
requtes SQL pour crer la table album et son contenu.
CREATE TABLE album (
id int(11) NOT NULL auto_increment,
artist varchar(100) NOT NULL,
title varchar(100) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO album (artist, title)
VALUES ('The Military Wives', 'In My Dreams');
INSERT INTO album (artist, title)
VALUES ('Adele', '21');
INSERT INTO album (artist, title)
VALUES ('Bruce Springsteen', 'Wrecking Ball (Deluxe)');
INSERT INTO album (artist, title)
VALUES ('Lana Del Rey', 'Born To Die');
INSERT INTO album (artist, title)
VALUES ('Gotye', 'Making Mirrors');
(Ces donnes de test ont t choisies parce qu'elles faisaient partie des meilleures ventes sur Amazon UK lorsque
ce tutoriel a t crit !)
Nous avons maintenant des donnes dans la base et pouvons passer la cration d'un modle basique.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Nous dfinissons simplement une classe vide, qui tend l'objet Row. Nous ajouterons un filtre de saisie pour nos
formulaires un peu plus loin.
Puis nous allons crer notre propre classe AlbumTable qui tendra la classe Zend\Db\TableGateway
\AbstractTableGateway du rpertoire Model, comme ceci :
module/Album/src/Album/Model/AlbumTable.php
<?php
namespace Album\Model;
use Zend\Db\TableGateway\AbstractTableGateway,
Zend\Db\Adapter\Adapter,
Zend\Db\ResultSet\ResultSet;
class AlbumTable extends AbstractTableGateway
{
protected $table ='album';
protected $tableName ='album';
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
$this->resultSetPrototype = new ResultSet(new Album);
$this->initialize();
}
public function fetchAll()
{
$resultSet = $this->select();
return $resultSet;
}
public function getAlbum($id)
{
$id = (int) $id;
$rowset = $this->select(array('id' => $id));
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not find row $id");
}
return $row;
}
public function saveAlbum(Album $album)
{
$data = array(
'artist' => $album->artist,
'title' => $album->title,
);
$id = (int)$album->id;
if ($id == 0) {
$this->insert($data);
} else {
if ($this->getAlbum($id)) {
$this->update($data, array('id' => $id));
} else {
throw new \Exception('Form id does not exist');
}
}
- 12 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/src/Album/Model/AlbumTable.php
}
$this->insert($data);
C'est un assez gros morceau... Tout d'abord nous avons dfini les proprits protected table et tableName avec le
nom de la table de la base de donnes, album dans notre cas. Nous ajoutons ensuite un constructeur qui prend
comme seul paramtre l'adapter de la base de donnes et nous l'assignons la proprit adapter de notre classe.
Nous devons ensuite renseigner les donnes de chaque nouvel objet Album cr avec les donnes de la table. Les
classes TableGateway utilisent un modle de prototype pour crer les jeux de donnes et les entits. Cela signifie
qu' la place d'instancier un objet quand on en a besoin, le systme clone le dernier objet instanci. Pour plus de
dtails, visitez ce site.
Nous crons ensuite cinq mthodes helper pour que notre application utilise l'interface pour accder la table
de la base de donnes.
fetchAll() remonte tous les albums de la base de donnes, c'est un objet de type ResultSet ;
getAlbum() remonte un seul album, c'est un objet de type Row ;
addAlbum() cre une nouvelle ligne dans la base de donnes ;
updateAlbum() met jour un album ;
deleteAlbum() supprime compltement une ligne.
- 13 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/Module.php
{
Cette mthode retourne un tableau de factories qui sont fusionnes par le ModuleManager avant d'tre passes
au ServiceManager. Nous avons galement besoin d'crire une fabrique ( factory ) pour instancier l'adapter de
notre base de donnes. En tant que service de l'application, nous faisons cela dans la classe Module du module
Application :
module/Application/Module.php
<?php
namespace Application;
use Zend\Db\Adapter\Adapter as DbAdapter;
class Module
{
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
config/autoload/global.php
);
),
Nous pouvons dsormais appeler la mthode getAlbumTable() depuis notre contrleur ds que nous avons besoin
d'interagir avec le modle. Poursuivons avec la liste des albums, appele par l'action index.
Avec Zend Framework 2, pour pouvoir envoyer des variables la vue, il faut retourner une instance ViewModel avec
un tableau contenant les donnes ncessaires l'affichage en premier paramtre du constructeur. Ces donnes
sont passes automatiquement la vue. L'objet ViewModel permet aussi de changer le script de la vue qu'on utilise,
mais le script de vue par dfaut est nomm {controller name}/{action name}. Nous pouvons maintenant remplir le
fichier index.phtml :
module/Album/view/album/album/index.phtml
<?php
$title = 'My albums';
$this->headTitle($title);
- 15 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/view/album/album/index.phtml
?>
La premire chose faire est de dfinir le titre de la page (utilis dans le layout), ainsi que le titre de la balise <head>
affich dans la barre du navigateur, en utilisant le helper de vue headTitle(). Nous crons ensuite un lien pour ajouter
un nouvel album.
Le helper de vue url() est fourni par Zend Framework 2 et est utilis pour crer le lien souhait. Le premier paramtre
de url() est le nom de la route que nous souhaitons utiliser pour construire l'URL. Le second paramtre est un tableau
de toutes les variables placer dans les zones de paramtres. Dans notre cas, nous avons notre route album qui
accepte deux variables en zone de paramtre : action et id.
Nous faisons pareil avec la variable $albums que nous assignons depuis l'action du contrleur. Le systme des vues
de Zend Framework 2 gre automatiquement le passage de ces variables vers le script de la vue, donc nous n'avons
pas grer le prfixage avec $this-> comme nous le faisions avec Zend Framework 1, mais rien ne vous interdit
de le faire.
Nous allons crer un tableau pour afficher chaque titre et artiste des albums, ainsi qu'un lien permettant d'diter et
de supprimer l'enregistrement. Une boucle classique foreach: est utilise pour traiter chaque album de la liste. Nous
utilisons la forme alternative, avec endforeach; c'est plus facile ainsi, plutt que d'essayer de faire correspondre des
accolades. Une nouvelle fois, le helper de vue url() est utilis pour crer les liens d'dition et de suppression.
Notez que nous utilisons toujours le helper de vue escape() pour nous protger des failles XSS.
Si vous ouvrez une page avec l'URL http://zf2-tutorial.localhost/album vous devriez voir ceci :
- 16 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Les styles
Nous avons dmarr avec SkeletonApplication, qui est une bonne base de travail, mais nous avons besoin de changer
le titre et d'enlever le message du copyright. Nous pouvons faire cela dans la vue layout.phtml du module Application :
Dans module/Application/view/layout/layout.phtml, trouvez cette ligne :
<?php echo $this->headTitle('ZF2 Skeleton Application') ?>
Et changez-la en :
<?php echo $this->headTitle('ZF2 Tutorial') ?>
Remplacez-la par :
<a class="brand" href="<?php echo $this->url('home') ?>">Tutorial</a>
Pour cela nous utilisons Zend\Form. Le composant Zend\Form gre le formulaire et la validation. Nous ajoutons un
Zend\InputFilter notre entit Album. Nous commenons par crer une nouvelle classe Album\Form\AlbumForm qui
tend Zend\Form\Form pour dfinir notre formulaire. Vous devez mettre la classe dans le fichier AlbumForm.php du
rpertoire module/Album/src/Album/Form.
Crons ce fichier :
- 17 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/src/Album/Form/AlbumForm.php
<?php
namespace Album\Form;
use Zend\Form\Form;
class AlbumForm extends Form
{
public function __construct()
{
parent::__construct();
$this->setName('album');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'id',
'attributes' => array(
'type' => 'hidden',
),
));
$this->add(array(
'name' => 'artist',
'attributes' => array(
'type' => 'text',
'label' => 'Artist',
),
));
$this->add(array(
'name' => 'title',
'attributes' => array(
'type' => 'text',
'label' => 'Title',
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'label' => 'Go',
'id' => 'submitbutton',
),
));
Dans le constructeur de l'AlbumForm, nous dfinissons le nom et l'attribut method du formulaire, puis nous crons
quatre lments pour l'id, l'artiste, le titre de l'album, et le bouton submit. Pour chaque lment, nous dfinissons ses
diffrents attributs, sans oublier le label correspondant.
Nous passons ensuite la validation du formulaire. Avec Zend Framework 2, elle se fait avec un filtre de saisie, qui
peut soit tre indpendant ( standalone ), soit implmenter InputFilterAwareInterface, en tant qu'entit modle.
Nous allons ajouter ce filtre de saisie l'entit Album :
module/Album/src/Album/Model/Album.php
<?php
namespace Album\Model;
use Zend\Db\ResultSet\Row;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
- 18 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/src/Album/Model/Album.php
class Album extends Row implements InputFilterAwareInterface
{
protected $inputFilter;
public function setInputFilter(InputFilterInterface $inputFilter)
{
throw new \Exception("Not used");
}
public function getInputFilter()
{
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'id',
'required' => true,
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'artist',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'title',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
),
)));
}
}
$this->inputFilter = $inputFilter;
return $this->inputFilter;
- 19 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
L'InputFilterAwareInterface dfinit deux mthodes : setInputFilter() et getInputFilter(). Nous allons seulement nous
occuper de getInputFilter(), en levant une exception setInputFilter().
Dans getInputFilter(), nous instancions un objet InputFilter et lui ajoutons les champs requis. Nous ajoutons un champ
de saisie pour chaque proprit que nous voulons filtrer ou valider. Pour le champ id, nous ajoutons un filtre Int car
nous n'acceptons que des entiers. Pour les lments texte, nous ajoutons deux filtres, StripTags et StringTrim pour
supprimer le code HTML et les espaces inutiles. Nous les dfinissons en champs obligatoires, avec un validateur
StringLength pour s'assurer que l'utilisateur ne saisit pas plus de caractres que ce qui est enregistr en base de
donnes.
Nous allons maintenant afficher le formulaire et le soumettre, depuis l'action addAction() de AlbumController :
module/Album/src/Album/Controller/AlbumController.php
/**/
use Zend\Mvc\Controller\ActionController,
Zend\View\Model\ViewModel,
Album\Model\AlbumTable,
Album\Model\Album,
Album\Form\AlbumForm;
/**/
public function addAction()
{
$form = new AlbumForm();
$form->get('submit')->setAttribute('label', 'Add');
$request = $this->getRequest();
if ($request->isPost()) {
$album = new Album();
$form->setInputFilter($album->getInputFilter());
$form->setData($request->post());
if ($form->isValid()) {
$album->populate($form->getData());
$this->getAlbumTable()->saveAlbum($album);
// Redirect to list of albums
return $this->redirect()->toRoute('album');
}
}
return array('form' => $form);
}
/**/
Aprs avoir ajout AlbumForm la liste use, on implmente addAction(). Regardons son contenu en dtail :
$form = new AlbumForm();
$form->submit->setAttribute('label', 'Add');
Nous instanciions AlbumForm et dfinissons le label du bouton submit Add. En faisant cela ici, nous pouvons
rutiliser ce formulaire et utiliser un autre label.
$request = $this->getRequest();
if ($request->isPost()) {
$album = new Album();
$form->setInputFilter($album->getInputFilter());
$form->setData($request->post());
if ($form->isValid()) {
- 20 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Si la mthode isPost() de l'objet Request renvoie true, cela signifie que le formulaire a t soumis, donc nous activons
le filtre de saisie de l'instance de l'album. Nous valuons ensuite les donnes postes et vrifions si elles sont valides,
avec la mthode isValid().
// Redirect to list of albums
return $this->redirect()->toRoute('album');
Aprs avoir sauvegard l'album, nous redirigeons l'utilisateur vers la liste des albums avec le plugin Redirect du
contrleur.
return array('form' => $form);
Nous retournons enfin les variables que nous voulons assigner la vue. Dans notre cas, nous passons l'objet du
formulaire. Notez que Zend Framework 2 nous permet de retourner un tableau avec les variables assigner la vue,
ce qui crera un ViewModel. Cela est plus rapide crire.
Nous allons maintenant afficher le rendu du formulaire, dans la vue add.phtml :
module/Album/view/album/album/add.phtml
<?php
$title = 'Add new album';
$this->headTitle($title);
?>
<h1><?php echo $this->escape($title); ?></h1>
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('album', array('action' => 'add')));
echo $this->form()->openTag($form);
?>
<dl class="zend_form">
<?php echo $this->formInput($form->get('id')); ?>
<dt><?php echo $this->formLabel($form->get('title')); ?></dt>
<dd><?php
echo $this->formInput($form->get('title'));
echo $this->formElementErrors($form->get('title'));
?></dd>
<dt><?php echo $this->formLabel($form->get('artist')); ?></dt>
<dd><?php
echo $this->formInput($form->get('artist'));
echo $this->formElementErrors($form->get('artist'));
?></dd>
<dd><?php
echo $this->formInput($form->get('submit'));
echo $this->formElementErrors($form->get('submit'));
?></dd>
</dl>
<?php echo $this->form()->closeTag($form); ?>
nouveau, nous affichons le titre puis nous affichons le formulaire. Zend Framework fournit des helpers de vue qui
nous facilitent la tche. Le helper form() possde des mthodes openTag() et closeTag() que nous utilisons pour les
balises d'ouverture et de fermeture du formulaire. Puis, pour chaque lment, nous utilisons formLabel(), formInput()
et formElementErrors(). Le reste n'est que du HTML basique. Dans ce tutoriel, j'ai utilis une liste de dfinition.
- 21 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Nous pouvons maintenant utiliser le lien Add new album de la page d'accueil pour ajouter un nouvel album la liste.
diter un album
diter un album est pratiquement la mme chose qu'en ajouter un, le code est trs ressemblant. Cette fois nous
utilisons la mthode editAction() de l'AlbumController :
module/Album/src/Album/AlbumController.php
/**/
public function editAction()
{
$id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
if (!$id) {
return $this->redirect()->toRoute('album', array('action'=>'add'));
}
$album = $this->getAlbumTable()->getAlbum($id);
$form = new AlbumForm();
$form->bind($album);
$form->get('submit')->setAttribute('label', 'Edit');
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->post());
if ($form->isValid()) {
$this->getAlbumTable()->saveAlbum($album);
// Redirect to list of albums
return $this->redirect()->toRoute('album');
}
}
return array(
'id' => $id,
'form' => $form,
);
/**/
Ce code doit vous paratre familier. Observons les diffrences avec celui de l'ajout d'un album. Tout d'abord,
penchons-nous sur l'id qui est dans la route, nous l'utilisons pour charger l'album qui doit tre dit :
$id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
if (!$id) {
return $this->redirect()->toRoute('album', array('action'=>'add'));
}
$album = $this->getAlbumTable()->getAlbum($id);
Notez que si l'id vaut zro, nous redirigeons vers l'action de l'ajout d'un album.
- 22 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
l'affichage du formulaire, les valeurs par dfaut de chaque lment sont extraites du modle ;
Aprs le succs de la validation avec la mthode isValid(), les donnes du formulaire sont rinjectes dans le
modle.
Ces oprations sont effectues par un objet hydrator . Il y a un grand nombre d'hydrators, mais celui qui est dfini
par dfaut est Zend\Stdlib\Hydrator\ArraySerializable, qui attend deux paramtres dans le modle : getArrayCopy()
et populate(). Dans notre cas, Zend\Db\ResultSet\Row les implmente notre place. Nous n'avons pas besoin de
remplir le formulaire avec les donnes car cela est fait automatiquement, nous devons juste appeler le mapper
saveAlbum() pour sauvegarder les changements dans la base de donnes.
Le template edit.phtml ressemble celui de l'ajout d'un album :
module/Album/view/album/album/edit.phtml
<?php
$title = 'Edit album';
$this->headTitle($title);
?>
<h1><?php echo $this->escape($title); ?></h1>
<?php
$form = $this->form;
$form->setAttribute('action',
$this->url('album', array('action' => 'edit', 'id'=>$this->id)));
echo $this->form()->openTag($form);
?>
<dl class="zend_form">
<?php echo $this->formInput($form->get('id')); ?>
<dt><?php echo $this->formLabel($form->get('title')); ?></dt>
<dd><?php
echo $this->formInput($form->get('title'));
echo $this->formElementErrors($form->get('title'));
?></dd>
<dt><?php echo $this->formLabel($form->get('artist')); ?></dt>
<dd><?php
echo $this->formInput($form->get('artist'));
echo $this->formElementErrors($form->get('artist'));
?></dd>
<dd><?php
echo $this->formInput($form->get('submit'));
echo $this->formElementErrors($form->get('submit'));
?></dd>
</dl>
<?php echo $this->form()->closeTag($form); ?>
Les seuls changements sont le titre, qui passe Edit Album et l'action du formulaire qui dfinit aussi l'action
edit .
Vous pouvez dsormais diter les albums.
Supprimer un album
Pour finaliser notre application, nous devons ajouter la fonctionnalit de suppression. Nous avons plac un lien de
suppression pour chaque album dans notre liste. La premire approche serait de faire une suppression lors d'un clic.
- 23 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Mais ce n'est pas une bonne solution. Rappelez-vous les spcifications HTTP, nous vous rappelons que vous ne
devez pas effectuer d'action irrversible en passant par GET, la place il est prfrable d'utiliser POST.
Nous allons afficher un formulaire de demande de confirmation quand l'utilisateur clique sur le lien de suppression
et lancer la suppression s'il la valide. Comme ce formulaire est assez trivial, nous le mettons directement dans notre
vue (aprs tout, Zend\Form est facultatif !).
Commenons le code de l'action dans AlbumController::deleteAction() :
module/Album/src/Album/AlbumController.php
/**/
public function deleteAction()
{
$id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
if (!$id) {
return $this->redirect()->toRoute('album');
}
$request = $this->getRequest();
if ($request->isPost()) {
$del = $request->post()->get('del', 'No');
if ($del == 'Yes') {
$id = (int)$request->post()->get('id');
$this->getAlbumTable()->deleteAlbum($id);
}
// Redirect to list of albums
return $this->redirect()->toRoute('default', array(
'controller' => 'album',
'action' => 'index',
));
}
return array(
'id' => $id,
'album' => $this->getAlbumTable()->getAlbum($id)
);
/**/
Comme auparavant, nous connaissons l'id indiqu dans la route. Nous vrifions la valeur de la mthode isPost()
pour dterminer s'il faut afficher la page de confirmation ou supprimer l'album. Nous utilisons l'objet de la table
( AlbumTable ) pour supprimer la ligne, avec la mthode deleteAlbum(). Si la requte n'est pas en POST, nous
chargeons cette ligne depuis la base de donnes pour l'assigner la vue, et ce grce l'id.
Le script de la vue est un simple formulaire :
module/Album/view/album/album/delete.phtml
<?php
$title = 'Delete album';
$this->headTitle($title);
?>
<h1><?php echo $this->escape($title); ?></h1>
<p>Are you sure that you want to delete
'<?php echo $this->escape($album['title']); ?>' by
'<?php echo $this->escape($album['artist']); ?>'?
</p>
<?php
$url = $this->url('album', array('action' => 'delete', 'id'=>$this->id)); ?>
<form action="<?php echo $url; ?>" method="post">
- 24 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
module/Album/view/album/album/delete.phtml
<div>
<input type="hidden" name="id" value="<?php echo (int)$album['id']; ?>" />
<input type="submit" name="del" value="Yes" />
<input type="submit" name="del" value="No" />
</div>
</form>
Dans ce script, nous affichons le message de confirmation, puis un formulaire avec les boutons Oui ou Non. Dans
l'action, nous lanons la suppression si le Oui a t choisi.
Conclusion et remerciements
Ceci conclut cette rapide prsentation de la construction, basique mais fonctionnelle, d'une application MVC base
sur Zend Framework 2. J'espre que cela vous aura t utile. Si vous dtectez une erreur, merci de me prvenir
par e-mail rob@akrabat.com !
Zend Framework 2 est toujours en version bta, il n'existe pas encore beaucoup d'articles. Vous pouvez consulter
le manuel cette adresse .
Mon site web http://akrabat.com prsente un grand nombre d'articles sur Zend Framework et je commence en
crer de nouveaux sur Zend Framework 2.
- 25 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/
Dmarrer avec Zend Framework 2 par Rob Allen (auteur) - Philippe Peso (traducteur)
Cet article a t publi avec l'aimable autorisation de Rob Allen. L'article original peut tre lu sur son site : http://
akrabat.com/zend-framework-2-tutorial/.
Nous remercions particulirement http://www.developpez.net/forums/u489587/philippe-peso/ pour avoir propos
de publier sa traduction de cet article.
Nous tenons aussi remercier ClaudeLELOUP pour sa relecture attentive de cet article.
- 26 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright Rob Allen (auteur), Philippe Peso (traduction franaise). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page
est dpose la SACD.
http://zend-framework.developpez.com/tutoriels/zend-framework/demarrer-avec-zend-framework-2/