1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 20763 -->
4 <sect1 id="zend.application.examples">
5 <title>Exemples</title>
8 La classe de bootstrap elle-même sera typiquement minimaliste ; souvent, elle s'agira
9 simplement d'une extension vide de la classe de bootstrap de base :
12 <programlisting language="php"><![CDATA[
13 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
18 <para>Avec un fichier de configuration tel que :</para>
20 <programlisting language="ini"><![CDATA[
21 ; APPLICATION_PATH/configs/application.ini
23 bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
24 bootstrap.class = "Bootstrap"
25 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
27 [testing : production]
28 [development : production]
32 Cependant, si de l'initialisation personnalisée est nécessaire, alors vous avez 2
33 choix. D'abord vous pouvez écrire des méthodes préfixées par <emphasis>_init</emphasis> pour
34 ajouter du code au bootstrap. De telles méthodes seront appelées par
35 <methodname>bootstrap()</methodname>, et peuvent être appelées comme si elles étaient
36 publiques, par : <emphasis>bootstrap<resource>()</emphasis>. Elles peuvent
37 accepter un tableau d'options.
41 Si votre méthode de ressource retourne une valeur, elle sera stockée dans un conteneur du
42 bootstrap. Ceci peut être utile quand différentes ressources ont besoin d'interagir (comme
43 une ressource s'injectant elle-même dans une autre). La méthode
44 <methodname>getResource()</methodname> peut être utilisée pour récupérer ces valeurs.
48 L'exemple ci-dessous montre une méthode de ressource pour l'initialisation d'un objet
49 requête. Il utilise le traqueur de dépendances (il dépend de la ressource de contrôleur
50 frontal), récupère une ressource à partir du bootstrap, et retourne une valeur à stocker
54 <programlisting language="php"><![CDATA[
55 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
57 protected function _initRequest()
59 // Vérifie que le contrôleur frontal est bien présent, et le récupère
60 $this->bootstrap('FrontController');
61 $front = $this->getResource('FrontController');
63 // Initialise l'objet requête
64 $request = new Zend_Controller_Request_Http();
65 $request->setBaseUrl('/foo');
67 // On l'ajoute au contrôleur frontal
68 $front->setRequest($request);
70 // Le bootstrap va stocker cette valeur dans la clé 'request'
78 Notez l'appel à <methodname>bootstrap()</methodname> ; Ceci permet de s'assurer que le
79 contrôleur frontal a bien été initialisé avant d'appeler cette méthode.
83 Une autre option consiste à utiliser des ressources de bootstrap. Les plugins de
84 ressources sont des objets qui s'occupent d'initialisations spéciales, elles peuvent être
91 à l'instanciation d'un objet <classname>Zend_Application</classname> ;
95 <para>pendant l'initialisation de l'objet bootstrap ;</para>
99 en les activant spécifiquement via des appels de méthodes sur l'objet de
106 Les plugins de ressources implémentent
107 <classname>Zend_Application_Resource_ResourceAbstract</classname>, qui définit simplement
108 qu'elles peuvent être injectées dans l'objet les appelant, et qu'elles ont une méthode
109 <methodname>init()</methodname>. Voici un exemple d'un bootstrap de vue :
112 <programlisting language="php"><![CDATA[
113 class My_Bootstrap_Resource_View
114 extends Zend_Application_ResourceAbstract
116 public function init()
118 $view = new Zend_View($this->getOptions());
119 Zend_Dojo::enableView($view);
121 $view->doctype('XHTML1_STRICT');
122 $view->headTitle()->setSeparator(' - ')->append('My Site');
123 $view->headMeta()->appendHttpEquiv('Content-Type',
124 'text/html; charset=utf-8');
126 $view->dojo()->setDjConfigOption('parseOnLoad', true)
127 ->setLocalPath('/js/dojo/dojo.js')
128 ->registerModulePath('../spindle', 'spindle')
129 ->addStylesheetModule('spindle.themes.spindle')
130 ->requireModule('spindle.main')
133 $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
136 $viewRenderer->setView($view);
144 Pour dire au bootstrap d'utiliser cette classe, vous devrez fournir le nom de la
145 classe pour ce plugin de ressource, ou une combinaison préfixe / chemin
146 de chargeur de plugin (plugin loader) et le nom court du plugin de ressource
150 <programlisting language="php"><![CDATA[
151 $application = new Zend_Application(
154 'resources' => array(
155 'My_Bootstrap_Resource_View' => array(), // nom de la classe OU
156 'view' => array(), // nom court
158 'FrontController' => array(
159 'controllerDirectory' => APPLICATION_PATH . '/controllers',
163 // Pour les noms courts, définissez les chemins :
164 'resourcePaths = array(
165 'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
172 Les plugins de ressource peuvent en appeler d'autres via le bootstrap parent :
175 <programlisting language="php"><![CDATA[
176 class My_Bootstrap_Resource_Layout
177 extends Zend_Application_ResourceAbstract
179 public function init()
181 // Assurons nous que la vue est initialisée...
182 $this->getBootstrap()->bootstrap('view');
184 // Récupère l'objet de vue :
185 $view = $this->getBootstrap()->getResource('view');
193 En usage normal, vous instancierez votre application, lancerez le bootstrap, puis
197 <programlisting language="php"><![CDATA[
198 $application = new Zend_Application(...);
199 $application->bootstrap()
204 Pour un script personnalisé, vous auriez peut être besoin de ne lancer que des
205 ressources spécifiques :
208 <programlisting language="php"><![CDATA[
209 $application = new Zend_Application(...);
210 $application->getBootstrap()->bootstrap('db');
212 $service = new Zend_XmlRpc_Server();
213 $service->setClass('Foo'); // uses database...
214 echo $service->handle();
218 Plutôt que d'utiliser la méthode <methodname>bootstrap()</methodname> pour appeler les
219 méthodes internes, vous pouvez surcharger :
222 <programlisting language="php"><![CDATA[
223 $application = new Zend_Application(...);
224 $application->getBootstrap()->bootstrapDb();