Il existe deux manières d'aborder
Zend_Application
, elles dépendent de la manière dont vous commencez
votre projet. Dans tous les cas, vous devrez créer une classe
Bootstrap
et un fichier de configuration.
Si vous souhaitez utiliser Zend_Tool
pour créer votre projet,
continuez votre lecture. Si vous ajoutez
Zend_Application
à un projet existant, vous devriez
passer à la suite.
La manière la plus rapide d'utiliser Zend_Application
est
d'appeler Zend_Tool
pour créer votre projet. Ceci va aussi
créer la classe de Bootstrap
.
Pour créer un projet, éxecutez la commande zf (sur les systèmes *nix) :
% zf create project newproject
Pour Windows, zf.bat
:
C:> zf.bat create project newproject
Ceci va créer une structure de projet ressemblant à:
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
Dans une telle structure, le bootstrap est
newproject/application/Bootstrap.php
, et ressemble
en premier lieux à ceci:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
Notez aussi la présence d'un fichier de configuration
newproject/application/configs/application.ini
, il
contient :
[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
Tous ces paramètres s'utilisent avec
Zend_Application
et avec le bootstrap.
Un autre fichier intéressant est
newproject/public/index.php
, qui invoque
Zend_Application
et le démarre.
// 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();
Pour continuer le guide de démarrage rapide,voyez la section sur les Ressources.
Les bases de Zend_Application
sont très simples :
Créez un fichier
application/Bootstrap.php
contenant une classeBootstrap
.Créez un fichier
application/configs/application.ini
contenant la configuration de base pourZend_Application
.Modifiez
public/index.php
afin d'utiliserZend_Application
.
D'abord, créez la classe Bootstrap
class. Dans le fichier
application/Bootstrap.php
, voici le contenu :
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
Créez maintenant votre configuration. Pour ce tutoriel, nous utilisons une syntaxe
INI, bien sûr une syntaxe XML,
JSON, YAML ou
PHP est utilisable aussi. Créez donc le fichier
application/configs/application.ini
, et ajoutez lui ce
contenu :
[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
Maintenant, modifions le script de démarrage
public/index.php
. Si le fichier n'existe pas, créez le, et
placez ce contenu dedans :
// 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();
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
.htaccess
si votre serveur le permet. Nous recommandons un
fichier public/.htaccess
avec le contenu suivant :
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]
Apprenez mod_rewrite
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 vous permettra d'en apprendre plus au sujet de mod_rewrite.
Voila, à partir de maintenant nous sommes prêts à tirer partie de la puissance de
Zend_Application
.
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").
Nous allons voir ici comment créer et configurer des ressources. D'abord un layout, puis nous personnaliserons un objet de vue.
Une ressource assez standard proposée par
Zend_Application
est "layout". Cette ressource attend
une configuration qu'elle fera suivre immédiatement à
Zend_Layout
.
Pour l'utiliser, vous devrez modifier votre fichier de configuration comme suit:
[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
Si ce n'est pas déja fait, créez le dossier
application/layouts/scripts/
, et le fichier
layout.phtml
dans ce même dossier. Voici un exemple de script
de layout tout à fait classique:
<?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>
Voila, vous avez un layout fonctionnel.
Maintenant passons à la vue. Nous voulons un DocType HTML et
une valeur de titre par défaut à utiliser dans la partie "head" du
HTML. Nous pouvons ordonner ceci en éditant la classe
Bootstrap
et en ajoutant une méthode.
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; } }
Cette méthode va être lancée automatiquement lors du bootstrap et configurera une vue.