quickstart-create-project.xml 20 KB

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