<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.application.quick-start">
    <title>Zend_Application démarrage rapide</title>

    <para>
        Il existe deux manières d'aborder
        <classname>Zend_Application</classname>, elles dépendent de la manière dont vous commencez
        votre projet. Dans tous les cas, vous devrez créer une classe
        <classname>Bootstrap</classname> et un fichier de configuration.
    </para>

    <para>
        Si vous souhaitez utiliser <classname>Zend_Tool</classname> pour créer votre projet,
        continuez votre lecture. Si vous ajoutez
        <classname>Zend_Application</classname> à un projet existant, vous devriez
        <link linkend="zend.application.quick-start.manual">passer à la suite</link>.
    </para>

    <sect2 id="zend.application.quick-start.zend-tool">
        <title>Utiliser Zend_Tool</title>

        <para>
            La manière la plus rapide d'utiliser <classname>Zend_Application</classname> est
            d'appeler <classname>Zend_Tool</classname> pour créer votre projet. Ceci va aussi
            créer la classe de <classname>Bootstrap</classname>.
        </para>

        <para>
            Pour créer un projet, éxecutez la commande <command>zf</command> (sur les
            systèmes *nix)&#160;:
        </para>

        <programlisting language="sh"><![CDATA[
% zf create project newproject
]]></programlisting>

        <para>
            Pour Windows, <filename>zf.bat</filename>:
        </para>

        <programlisting language="dos"><![CDATA[
C:> zf.bat create project newproject
]]></programlisting>

        <para>
            Ceci va créer une structure de projet ressemblant à:
        </para>

        <programlisting language="text"><![CDATA[
newproject
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   `-- index.php
`-- tests
    |-- application
    |   `-- bootstrap.php
    |-- library
    |   `-- bootstrap.php
    `-- phpunit.xml
]]></programlisting>

        <para>
            Dans une telle structure, le bootstrap est
            <filename>newproject/application/Bootstrap.php</filename>, et ressemble
            en premier lieux à ceci:
        </para>

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
]]></programlisting>

        <para>
            Notez aussi la présence d'un fichier de configuration
            <filename>newproject/application/configs/application.ini</filename>, il
            contient&#160;:
        </para>

        <programlisting language="dosini"><![CDATA[
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[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>
            Tous ces paramètres s'utilisent avec
            <classname>Zend_Application</classname> et avec le bootstrap.
        </para>

        <para>
            Un autre fichier intéressant est
            <filename>newproject/public/index.php</filename>, qui invoque
            <classname>Zend_Application</classname> et le démarre.
        </para>

        <programlisting language="php"><![CDATA[
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();
]]></programlisting>

        <para>
            Pour continuer le guide de démarrage rapide,<link
            linkend="zend.application.quick-start.resources">voyez la section sur les
            Ressources</link>.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.manual">
        <title>Ajouter Zend_Application à votre existant</title>

        <para>
            Les bases de <classname>Zend_Application</classname> sont très simples&#160;:
        </para>

        <itemizedlist>
            <listitem><para>
                Créez un fichier <filename>application/Bootstrap.php</filename> contenant
                une classe <classname>Bootstrap</classname>.
            </para></listitem>

            <listitem><para>
                Créez un fichier <filename>application/configs/application.ini</filename>
                contenant la configuration de base pour <classname>Zend_Application</classname>.
            </para></listitem>

            <listitem><para>
                Modifiez <filename>public/index.php</filename> afin d'utiliser
                <classname>Zend_Application</classname>.
            </para></listitem>
        </itemizedlist>

        <para>
            D'abord, créez la classe <classname>Bootstrap</classname> class. Dans le fichier
            <filename>application/Bootstrap.php</filename>, voici le contenu&#160;:
        </para>

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
]]></programlisting>

        <para>
            Créez maintenant votre configuration. Pour ce tutoriel, nous utilisons une syntaxe
            <acronym>INI</acronym>, bien sûr une syntaxe <acronym>XML</acronym>,
            <acronym>JSON</acronym>, <acronym>YAML</acronym> ou
            <acronym>PHP</acronym> est utilisable aussi. Créez donc le fichier
            <filename>application/configs/application.ini</filename>, et ajoutez lui ce
            contenu&#160;:
        </para>

        <programlisting language="dosini"><![CDATA[
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[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>
            Maintenant, modifions le script de démarrage
            <filename>public/index.php</filename>. Si le fichier n'existe pas, créez le, et
            placez ce contenu dedans&#160;:
        </para>

        <programlisting language="php"><![CDATA[
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

// Typically, you will also want to add your library/ directory
// to the include_path, particularly if it contains your ZF installed
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/library',
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();
]]></programlisting>

        <para>
            Notez que l'environnement applicatif est défini dans une constante
            "APPLICATION_ENV". Nous recommandons la spécification d'un tel paramètre dans la
            configuration générale du serveur Web. Pour Apache, vous pouvez utiliser
            <filename>.htaccess</filename> si votre serveur le permet. Nous recommandons un
            fichier <filename>public/.htaccess</filename> avec le contenu suivant&#160;:
        </para>

        <programlisting language="conf"><![CDATA[
SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
]]></programlisting>

        <note>
            <title>Apprenez mod_rewrite</title>

            <para>
                Les règles de réécriture ci-dessus autorisent l'accès à tout fichier existant
                dans l'hôte virtuel. S'il existe des fichiers que vous ne voulez pas exposer,
                utilisez des règles plus restrictives. Le site Web d'Apache <ulink
                    url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">vous permettra
                    d'en apprendre plus au sujet de mod_rewrite</ulink>.
            </para>
        </note>

        <para>
            Voila, à partir de maintenant nous sommes prêts à tirer partie de la puissance de
            <classname>Zend_Application</classname>.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.resources">
        <title>Ajouter et créer des ressources</title>

        <para>
            Si vous avez suivi les instructions jusqu'à maintenant, alors votre classe de
            bootstrap utilisera le contrôleur frontal et lorsque lancée, lancera le dispatch
            du contrôleur frontal. En vérité, il va être rapidement nécessaire de rajouter de
            la configuration, concernant d'autres objets divers (appelés "ressources").
        </para>

        <para>
            Nous allons voir ici comment créer et configurer des ressources. D'abord un layout,
            puis nous personnaliserons un objet de vue.
        </para>

        <para>
            Une ressource assez standard proposée par
            <classname>Zend_Application</classname> est "layout". Cette ressource attend
            une configuration qu'elle fera suivre immédiatement à
            <classname>Zend_Layout</classname>.
        </para>

        <para>
            Pour l'utiliser, vous devrez modifier votre fichier de configuration comme suit:
        </para>

        <programlisting language="dosini"><![CDATA[
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

; AJOUTEZ CES LIGNES
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

[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>
            Si ce n'est pas déja fait, créez le dossier
            <filename>application/layouts/scripts/</filename>, et le fichier
            <filename>layout.phtml</filename> dans ce même dossier. Voici un exemple de script
            de layout tout à fait classique:
        </para>

        <programlisting language="php"><![CDATA[
<?php echo $this->doctype() ?>
<html>
<head>
    <?php echo $this->headTitle() ?>
    <?php echo $this->headLink() ?>
    <?php echo $this->headStyle() ?>
    <?php echo $this->headScript() ?>
</head>
<body>
    <?php echo $this->layout()->content ?>
</body>
</html>
]]></programlisting>

        <para>
            Voila, vous avez un layout fonctionnel.
        </para>

        <para>
            Maintenant passons à la vue. Nous voulons un DocType <acronym>HTML</acronym> et
            une valeur de titre par défaut à utiliser dans la partie "head" du
            <acronym>HTML</acronym>. Nous pouvons ordonner ceci en éditant la classe
            <classname>Bootstrap</classname> et en ajoutant une méthode.
        </para>

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialisons la vue
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Ajoutons là au ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Retourner la vue pour qu'elle puisse être stockée par le bootstrap
        return $view;
    }
}
]]></programlisting>

        <para>
            Cette méthode va être lancée automatiquement lors du bootstrap et configurera une vue.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.next-steps">
        <title>Aller plus loin avec Zend_Application</title>

        <para>
            Nous venons de voir comment configurer de manière basique
            <classname>Zend_Application</classname> ainsi que les principes du bootstrap. Pour un
            maximum de réutilisation de code, vous devriez songer à utiliser des plugins de
            ressources. Continuez à lire la suite&#160;!
        </para>
    </sect2>
</sect1>
