1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.quickstart.create-project">
<title>Créer votre projet</title>
<para>
Afin de créer un projet, vous devez d'abord télécharger et extraire Zend Framework.
</para>
<sect2 id="learning.quickstart.create-project.install-zf">
<title>Installer Zend Framework</title>
<para>
La manière la plus simple d'obtenir Zend Framework avec une pile <acronym>PHP</acronym>
complète est d'installer <ulink url="http://www.zend.com/en/products/server-ce/downloads">
Zend Server</ulink>. Zend Server possède des installeurs natifs pour Mac OSX, Windows, Fedora Core,
et Ubuntu, ainsi qu'un installeur universel pour la plupart des distributions Linux.
</para>
<para>
Après avoir installé Zend Server, les fichiers du Framework devraient se trouver sous
<filename>/usr/local/zend/share/ZendFramework</filename> sur Mac OSX et Linux,
et <filename>C:\Program Files\Zend\ZendServer\share\ZendFramework</filename> sur
Windows. L'<constant>include_path</constant> aura déja été configuré pour inclure
Zend Framework.
</para>
<para>
Il reste bien sûr possible <ulink url="http://framework.zend.com/download/latest"> de télécharger
la dernière version de Zend Framework</ulink> et l'extraire; notez simplement où vous choisissez
de l'extraire.
</para>
<para>
Optionellement, vous pouvez ajouter le chemin vers le sous-dossier <filename>library/</filename>
de l'archive à l'<constant>include_path</constant> de votre <filename>php.ini</filename>.
</para>
<para>
Ca y est! Zend Framework est maintenant installé et prêt à l'emploi.
</para>
</sect2>
<sect2 id="learning.quickstart.create-project.create-project">
<title>Créer votre projet</title>
<note>
<title>Outil en ligne de commandes zf</title>
<para>
Dans la dossier <filename>bin/</filename> de votre installation de Zend Framework
se trouvent les scripts <filename>zf.sh</filename> et <filename>zf.bat</filename>
pour Unix et Windows respectivement. Notez le chemin absolu vers ces fichiers.
</para>
<para>
Partout ou vous voyez uyne référence à la commande <command>zf</command>, utilisez le chemin
absolu du script. Sur les système Unix, vous pouvez utiliser la fonctionnalité d'alias dans le
shell: <command>alias zf.sh=path/to/ZendFramework/bin/zf.sh</command>.
</para>
<para>
Si vous avez des problèmes pour configurer la commande <command>zf</command>, veuillez vous
référer <link linkend="zend.tool.framework.clitool">au manuel</link>.
</para>
</note>
<para>
Ouvrez un terminal (sous Windows, <command>Démarrer -> Exécuter</command>, puis
<command>cmd</command>). Naviguez vers un dossier dans lequel vous souhaitez démarrer un projet.
Puis, utilisez le chemin vers le script approprié et lancez:
</para>
<programlisting language="shell"><![CDATA[
% zf create project quickstart
]]></programlisting>
<para>
Cette commande crée un projet avec une structure basique incluant des contrôleurs et vues.
L'arbre va ressembler à ceci:
</para>
<programlisting language="text"><![CDATA[
quickstart
|-- application
| |-- Bootstrap.php
| |-- configs
| | `-- application.ini
| |-- controllers
| | |-- ErrorController.php
| | `-- IndexController.php
| |-- models
| `-- views
| |-- helpers
| `-- scripts
| |-- error
| | `-- error.phtml
| `-- index
| `-- index.phtml
|-- library
|-- public
| |-- .htaccess
| `-- index.php
`-- tests
|-- application
| `-- bootstrap.php
|-- library
| `-- bootstrap.php
`-- phpunit.xml
]]></programlisting>
<para>
Dès lors si vous n'avez pas ajouté Zend Framework à votre
<constant>include_path</constant>, nous vous recommandons de copier ou lier celui-ci dans
le dossier <filename>library/</filename> de votre projet. Dans ce cas vous devriez copier
récursivement (ou lier) <filename>library/Zend/</filename> de l'installation de
Zend Framework vers le dossier <filename>library/</filename> de votre projet. Sur les
systèmes Unix cela peut être effectué de la manière suivante:
</para>
<programlisting language="shell"><![CDATA[
# Symlink:
% cd library; ln -s path/to/ZendFramework/library/Zend .
# Copy:
% cd library; cp -r path/to/ZendFramework/library/Zend .
]]></programlisting>
<para>
Sur Windows le plus simple sera d'utiliser l'explorateur.
</para>
<para>
Maintenant que le projet est crée, les principaux points à comprendre sont le
bootstrap, la configuration, les contrôleurs d'action et les vues.
</para>
</sect2>
<sect2 id="learning.quickstart.create-project.bootstrap">
<title>Le Bootstrap</title>
<para>
Votre classe <classname>Bootstrap</classname> définit les ressources (composants) à
initialiser. Par défaut, le <link linkend="zend.controller.front">contrôleur frontal
</link> est initialisé et il utilise <filename>application/controllers/</filename>
comme dossier de contrôleurs par défaut (nous reverrons cela). La classe ressemble à:
</para>
<programlisting language="php"><![CDATA[
// application/Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
]]></programlisting>
<para>
Comme vous le voyez, rien de plus n'est nécessaire pour commencer.
</para>
</sect2>
<sect2 id="learning.quickstart.create-project.configuration">
<title>Configuration</title>
<para>
Le Zend Framework lui-même n'a pas besoin de configuration, mais l'application oui. La
configuration par défaut est placée sous
<filename>application/configs/application.ini</filename> et contient des directives de base
pour régler l'environnement <acronym>PHP</acronym> (par exemple, activer ou désactiver le
rapport d'erreurs), indiquer le chemin vers votre classe de bootstrap (ainsi que son nom)
, et le chemin vers les contrôleurs d'action. Cela ressemble à:
</para>
<programlisting language="ini"><![CDATA[
; application/configs/application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
]]></programlisting>
<para>
Plusieurs choses sont à connaitre concernant ce fichier. D'abord, si vous utilisez une
configuration basée sur des fichiers <acronym>INI</acronym>, vous pouvez faire usage des
constantes directement; <constant>APPLICATION_PATH</constant> est ici une constante. Aussi,
notez que plusieurs sections ont été définies: production, staging, testing, et
development. Les trois dernières héritent de la section "production". C'est une manière utile
d'organiser sa configuration et de s'assurer que les paramètres appropriés sont utilisés
pour chaque étape du développement de l'application.
</para>
</sect2>
<sect2 id="learning.quickstart.create-project.action-controllers">
<title>Contrôleurs d'action</title>
<para>
Les <emphasis>contrôleurs d'action</emphasis> de votre application contiennent la logique 'utile'
de celle-ci et font correspondre les requêtes aux bons modèles et aux bonnes vues.
</para>
<para>
Un contrôleur d'action devrait posséder une ou plusieurs méthodes se terminant par
"Action"; ces méthodes sont interrogées via le web. Par défaut, les URLs de Zend
Framework suivent le schéma <constant>/controller/action</constant>, où
"controller" correspond à la classe de contrôleur (sans le suffixe "Controller")
et "action" correspond à la méthode d'action (sans le suffixe "Action").
</para>
<para>
Typiquement, vous aurez toujours besoin d'un <classname>IndexController</classname>,
qui est utilisé par défaut et servira aussi la page d'accueil, et un
<classname>ErrorController</classname>, utilisé pour indiquer les erreurs
<acronym>HTTP</acronym> 404 (contrôleur ou action introuvable) et les erreurs
<acronym>HTTP</acronym> 500 (erreurs de l'application).
</para>
<para>
<classname>IndexController</classname> par défaut est défini comme suit:
</para>
<programlisting language="php"><![CDATA[
// application/controllers/IndexController.php
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialisez le contrôleur et l'action ici */
}
public function indexAction()
{
// corps de l'action
}
}
]]></programlisting>
<para>
<classname>ErrorController</classname> par défaut est défini comme suit:
</para>
<programlisting language="php"><![CDATA[
// application/controllers/ErrorController.php
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
$errors = $this->_getParam('error_handler');
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;
default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}
$this->view->exception = $errors->exception;
$this->view->request = $errors->request;
}
}
]]></programlisting>
<para>
Notez que (1) <classname>IndexController</classname> ne contient pas de code réel,
et (2) <classname>ErrorController</classname> référence un attribut "view".
Ceci nous mène vers la section suivante.
</para>
</sect2>
<sect2 id="learning.quickstart.create-project.views">
<title>Vues</title>
<para>
Les vues dans Zend Framework sont écrites en <acronym>PHP</acronym> classique. Les scripts
de vues sont placés sous <filename>application/views/scripts/</filename>, ils sont
référencés plus tard dans les contrôleurs. Dans notre cas, nous avons un
<classname>IndexController</classname> et un <classname>ErrorController</classname>,
et nous avons ainsi des dossiers <filename>index/</filename> et
<filename>error/</filename> correspondants dans le dossier scripts des vues. Dans ces
dossiers, vous trouverez ou créerez des scripts de vue correspondants aux actions
exposées par les contrôleurs; dans le cas par défaut nous avons ainsi des scripts de
vue <filename>index/index.phtml</filename> et <filename>error/error.phtml</filename>.
</para>
<para>
Les scripts de vue peuvent contenir le code de présentation que vous voulez et utiliser
les tags <emphasis><?php</emphasis> ou <emphasis>?></emphasis> pour insérer du
<acronym>PHP</acronym>.
</para>
<para>
Ce qui suit présente le code par défaut de <filename>index/index.phtml</filename>:
</para>
<programlisting language="php"><![CDATA[
<!-- application/views/scripts/index/index.phtml -->
<style>
a:link,
a:visited
{
color: #0398CA;
}
span#zf-name
{
color: #91BE3F;
}
div#welcome
{
color: #FFFFFF;
background-image: url(http://framework.zend.com/images/bkg_header.jpg);
width: 600px;
height: 400px;
border: 2px solid #444444;
overflow: hidden;
text-align: center;
}
div#more-information
{
background-image: url(http://framework.zend.com/images/bkg_body-bottom.gif);
height: 100%;
}
</style>
<div id="welcome">
<h1>Welcome to the <span id="zf-name">Zend Framework!</span><h1 />
<h3>This is your project's main page<h3 />
<div id="more-information">
<p>
<img src="http://framework.zend.com/images/PoweredBy_ZF_4LightBG.png" />
</p>
<p>
Helpful Links: <br />
<a href="http://framework.zend.com/">Zend Framework Website</a> |
<a href="http://framework.zend.com/manual/en/">Zend Framework
Manual</a>
</p>
</div>
</div>
]]></programlisting>
<para>
Le script de vue <filename>error/error.phtml</filename> est plus intéréssant car il
inclut des conditions écrites en <acronym>PHP</acronym>:
</para>
<programlisting language="php"><![CDATA[
<!-- application/views/scripts/error/error.phtml -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN";
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zend Framework Default Application</title>
</head>
<body>
<h1>An error occurred</h1>
<h2><?php echo $this->message ?></h2>
<?php if ('development' == $this->env): ?>
<h3>Exception information:</h3>
<p>
<b>Message:</b> <?php echo $this->exception->getMessage() ?>
</p>
<h3>Stack trace:</h3>
<pre><?php echo $this->exception->getTraceAsString() ?>
</pre>
<h3>Request Parameters:</h3>
<pre><?php echo var_export($this->request->getParams(), 1) ?>
</pre>
<?php endif ?>
</body>
</html>
]]></programlisting>
</sect2>
<sect2 id="learning.quickstart.create-project.vhost">
<title>Creation d'un hôte virtuel</title>
<para>
Pour le quickstart nous supposerons que vous utilisez le <ulink
url="http://httpd.apache.org/">serveur web Apacher</ulink>. Zend Framework fonctionne
très bien avec d'autres serveurs -- y compris Microsoft Internet Information
Server, lighttpd, nginx, et plus -- mais la plupart des développeurs devraient être familiers
à Apache, et cela permet d'introduire la structure de dossiers de Zend Framework et les
capacités de réécriture.
</para>
<para>
Pour créer un vhost, vous devez connaitre l'emplacement du fichier
<filename>httpd.conf</filename>, et les emplacements des autres fichiers de configuration
protenciels. Voici quelques emplacements classiques:
</para>
<itemizedlist>
<listitem>
<para>
<filename>/etc/httpd/httpd.conf</filename> (Fedora, RHEL, et autres)
</para>
</listitem>
<listitem>
<para>
<filename>/etc/apache2/httpd.conf</filename> (Debian, Ubuntu, et autres)
</para>
</listitem>
<listitem>
<para>
<filename>/usr/local/zend/etc/httpd.conf</filename> (Zend Server sur *nix)
</para>
</listitem>
<listitem>
<para>
<filename>C:\Program Files\Zend\Apache2\conf</filename> (Zend Server sur Windows)
</para>
</listitem>
</itemizedlist>
<para>
Au sein de <filename>httpd.conf</filename> (ou <filename>httpd-vhosts.conf</filename>
sur certains systèmes), vous aurez besoin de deux choses. D'abord s'assurer que
<varname>NameVirtualHost</varname> est défini; typiquement à une valeur de "*:80".
Ensuite, définir les hôtes virtuels:
</para>
<programlisting language="apache"><![CDATA[
<VirtualHost *:80>
ServerName quickstart.local
DocumentRoot /path/to/quickstart/public
SetEnv APPLICATION_ENV "development"
<Directory /path/to/quickstart/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
]]></programlisting>
<para>
Notons plusieurs points. D'abord le <varname>DocumentRoot</varname> pointe vers le dossier
<filename>public</filename> du projet; ceci signifie que seuls les fichiers sous cette
arborescence peuvent être servis directement par le serveur. Ensuite,
<varname>AllowOverride</varname>, <varname>Order</varname>, et
<varname>Allow</varname>; ces directives servent à autoriser l'utilisation de fichiers
<filename>htacess</filename> dans le projet. Pendant le développement, c'est une bonne
pratique car ça évite de redémarrer sans arrêt le serveur dès qu'un changement y est opéré;
cependant en production le contenu de <filename>htaccess</filename> devrait être reproduit
dans la configuration puis désactivé. Enfin notez <varname>SetEnv</varname>. Ici nous
renseignons une variable d'environnement pour l'hôte virtuel, celle-ci sera récupérée
dans <filename>index.php</filename> et utilisée pour affecter la constante
<constant>APPLICATION_ENV</constant> de l'application Zend Framework. En
production, vous pouvez oublier cette directive (dans un tel cas la valeur par défaut sera
"production") ou la préciser explicitement à la valeur "production".
</para>
<para>
Finalement, vous devrez ajouter une entrée au DNS ou au fichier d'hôtes
(<filename>hosts</filename>) pour la valeur de <varname>ServerName</varname>. Sur les
systèmes *nix, il s'agit de <filename>/etc/hosts</filename>; sur Windows, vous trouverez
normalement ce fichier sous <filename>C:\WINDOWS\system32\drivers\etc</filename>. Quel que
soit le système, l'entrée sera de la forme:
</para>
<programlisting language="text"><![CDATA[
127.0.0.1 quickstart.local
]]></programlisting>
<para>
Démarrez votre serveur web (ou redémarrez le), et tout devrait être prêt.
</para>
</sect2>
<sect2 id="learning.quickstart.create-project.checkpoint">
<title>Checkpoint</title>
<para>
Dès lors, vous devriez pouvoir démarrer votre application Zend Framework. Faites pointer votre
navigateur vers l'hôte configuré dans la section précédente et une page d'accueil devrait
s'afficher.
</para>
</sect2>
</sect1>
|