[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Application-Examples.xml
blob41e3f9c8d708c41ceb57ce4ea67de9cf143d75ee
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 17734 -->
3     <!-- Reviewed: no -->
4 <sect1 id="zend.application.examples">
5     <title>Ejemplos</title>
7     <para>La propia clase Bootstrap suelen ser bastante mínima; a menudo, será
8         simplemente un talón
9         vacío ampliando la clase base bootstrap:</para>
11     <programlisting language="php"><![CDATA[
12 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
15 ]]></programlisting>
17     <para>Con el archivo de configuración coresspondiente:</para>
19     <programlisting language="ini"><![CDATA[
20 ; APPLICATION_PATH/configs/application.ini
21 [production]
22 bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
23 bootstrap.class = "Bootstrap"
24 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
26 [testing : production]
27 [development : production]
28 ]]></programlisting>
30     <para>
31         Sin embargo, si debiera ser necesaria un inicialización
32         personalizada, usted tiene dos
33         opciones. En primer lugar, usted puede
34         escribir métodos prefijados con
35         <emphasis>_init</emphasis>
36         para
37         especificar códigos distintos de arranque. Estos métodos pueden ser
38         llamados por
39         <methodname>bootstrap()</methodname>
40         , y también pueden ser
41         llamados como si fueran métodos públicos:
42         <emphasis>bootstrap&lt;resource&gt;()</emphasis>
43         . Deben
44         aceptar opcionalmente un array de opciones.
45     </para>
47     <para>
48         Si su método recurso devuelve un valor, será almacenado en un
49         contenedor en el bootstrap.
50         Esto puede ser útil cuando diferentes
51         recursos necesitan interactuar (como un recurso
52         inyectándose a sí mismo
53         en otro). Luego, el método
54         <methodname>getResource()</methodname>
55         puede
56         ser utilizado para recuperar esos valores.
57     </para>
59     <para>El siguiente ejemplo muestra un recurso de método para inicializar el
60         objeto solicitado.
61         Hace uso del segimiento de la dependencia (que
62         depende del recurso Front Controller),
63         obteniendo un recurso desde el
64         bootstrap y devolver el valor para almacenar en el bootstrap.</para>
66     <programlisting language="php"><![CDATA[
67 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
69     protected function _initRequest(array $options = array())
70     {
71         // Garantizar que la instancia de front controller esté presente, y buscarla
73         $this->bootstrap('FrontController');
74         $front = $this->getResource('FrontController');
76         // Inicializar el objeto requerido
77         $request = new Zend_Controller_Request_Http();
78         $request->setBaseUrl('/foo');
80         // Agregarlo al front controller
81         $front->setRequest($request);
83         // Bootstrap guardará este valor en la clave 'request' de su contenedor
84         return $request;
85     }
87 ]]></programlisting>
89     <para>
90         Nótese en este ejemplo la llamada a
91         <methodname>bootstrap()</methodname>
92         ; esto asegura que el front
93         controller ha sido inicializado antes de llamar a este método.
94         Esa
95         llamada puede desencadenar tanto un recurso u otro método de la clase.
96     </para>
98     <para>La otra opción es usar plugins de recursos, estos son objetos que
99         realizan inicializaciones
100         específicas, y pueden ser especificados:</para>
102     <itemizedlist>
103         <listitem>
104             <para>
105                 Cuando se instancia un onbeto de
106                 <classname>Zend_Application</classname>
107             </para>
108         </listitem>
109         <listitem>
110             <para>Durante la inicialización del objeto bootstrap (arranque)
111            </para>
112         </listitem>
113         <listitem>
114             <para>Habilitándolos explícitamente a través del método de llamada
115                 al objeto bootstrap</para>
116         </listitem>
117     </itemizedlist>
119     <para>
120         Los recursos de plugins implementan
121         <classname>Zend_Application_Resource_ResourceAbstract</classname>
122         ,
123         que define simplemente que permitirán la inyección del llamador y
124         opciones, y que tienen un
125         método
126         <methodname>init()</methodname>
127         method.
128         Como ejemplo, un recurso de una Vista (View) personalizada de bootstrap
129         podría ser
130         como lo siguiente:
131     </para>
133     <programlisting language="php"><![CDATA[
134 class My_Bootstrap_Resource_View
135     extends Zend_Application_Resource_ResourceAbstract
137     public function init()
138     {
139         $view = new Zend_View($this->getOptions());
140         Zend_Dojo::enableView($view);
142         $view->doctype('XHTML1_STRICT');
143         $view->headTitle()->setSeparator(' - ')->append('My Site');
144         $view->headMeta()->appendHttpEquiv('Content-Type',
145                                            'text/html; charset=utf-8');
147         $view->dojo()->setDjConfigOption('parseOnLoad', true)
148                      ->setLocalPath('/js/dojo/dojo.js')
149                      ->registerModulePath('../spindle', 'spindle')
150                      ->addStylesheetModule('spindle.themes.spindle')
151                      ->requireModule('spindle.main')
152                      ->disable();
154         $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
155             'ViewRenderer'
156         );
157         $viewRenderer->setView($view);
159         return $view;
160     }
162 ]]></programlisting>
164     <para>Para decirle al bootstrap que utilice éste, se tendría que
165         proporcionar ya sea el nombre de
166         la clase del plugin del recurso, o una
167         combinación del del prefijo de la ruta de carga del
168         plugin y el nombre
169         corto del plugin del recurso (por ejemplo, "view"):</para>
171     <programlisting language="php"><![CDATA[
172 $application = new Zend_Application(
173     APPLICATION_ENV,
174     array(
175         'resources' => array(
176             'My_Bootstrap_Resource_View' => array(), // full class name; OR
177             'view' => array(),                       // short name
179             'FrontController' => array(
180                 'controllerDirectory' => APPLICATION_PATH . '/controllers',
181             ),
182         ),
184         // For short names, define plugin path:
185        'pluginPaths = array(
186             'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
187         )
188     )
190 ]]></programlisting>
192     <para>Los recursos que son plugins puede llamar a otros recursos e
193         inicializadores accediendo al
194         bootstrap padre:</para>
196     <programlisting language="php"><![CDATA[
197 class My_Bootstrap_Resource_Layout
198     extends Zend_Application_Resource_ResourceAbstract
200     public function init()
201     {
202         // ensure view is initialized...
203         $this->getBootstrap()->bootstrap('view');
205         // Get view object:
206         $view = $this->getBootstrap()->getResource('view');
208         // ...
209     }
211 ]]></programlisting>
213     <para>En el uso normal, se podría instanciar la aplicación, arrancarla, y
214         ejecutarla:</para>
216     <programlisting language="php"><![CDATA[
217 $application = new Zend_Application(...);
218 $application->bootstrap()
219             ->run();
220 ]]></programlisting>
222     <para>Para un script personalizado, se podría necesitar simplemente
223         inicializar recursos
224         específicos:</para>
226     <programlisting language="php"><![CDATA[
227 $application = new Zend_Application(...);
228 $application->getBootstrap()->bootstrap('db');
230 $service = new Zend_XmlRpc_Server();
231 $service->setClass('Foo');  // uses database...
232 echo $service->handle();
233 ]]></programlisting>
235     <para>
236         En lugar de utilizar el método
237         <methodname>bootstrap()</methodname>
238         para llamar a los métodos internos o recursos, también puede usar
239         sobrecarga:
240     </para>
242     <programlisting language="php"><![CDATA[
243 $application = new Zend_Application(...);
244 $application->getBootstrap()->bootstrapDb();
245 ]]></programlisting>
246 </sect1>