1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 17734 -->
4 <sect1 id="zend.application.examples">
5 <title>Ejemplos</title>
7 <para>La propia clase Bootstrap suelen ser bastante mínima; a menudo, será
9 vacío ampliando la clase base bootstrap:</para>
11 <programlisting language="php"><![CDATA[
12 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
17 <para>Con el archivo de configuración coresspondiente:</para>
19 <programlisting language="ini"><![CDATA[
20 ; APPLICATION_PATH/configs/application.ini
22 bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
23 bootstrap.class = "Bootstrap"
24 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
26 [testing : production]
27 [development : production]
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>
37 especificar códigos distintos de arranque. Estos métodos pueden ser
39 <methodname>bootstrap()</methodname>
40 , y también pueden ser
41 llamados como si fueran métodos públicos:
42 <emphasis>bootstrap<resource>()</emphasis>
44 aceptar opcionalmente un array de opciones.
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>
56 ser utilizado para recuperar esos valores.
59 <para>El siguiente ejemplo muestra un recurso de método para inicializar el
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())
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
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.
95 llamada puede desencadenar tanto un recurso u otro método de la clase.
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>
105 Cuando se instancia un onbeto de
106 <classname>Zend_Application</classname>
110 <para>Durante la inicialización del objeto bootstrap (arranque)
114 <para>Habilitándolos explícitamente a través del método de llamada
115 al objeto bootstrap</para>
120 Los recursos de plugins implementan
121 <classname>Zend_Application_Resource_ResourceAbstract</classname>
123 que define simplemente que permitirán la inyección del llamador y
124 opciones, y que tienen un
126 <methodname>init()</methodname>
128 Como ejemplo, un recurso de una Vista (View) personalizada de bootstrap
133 <programlisting language="php"><![CDATA[
134 class My_Bootstrap_Resource_View
135 extends Zend_Application_Resource_ResourceAbstract
137 public function init()
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')
154 $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
157 $viewRenderer->setView($view);
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
169 corto del plugin del recurso (por ejemplo, "view"):</para>
171 <programlisting language="php"><![CDATA[
172 $application = new Zend_Application(
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',
184 // For short names, define plugin path:
185 'pluginPaths = array(
186 'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
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()
202 // ensure view is initialized...
203 $this->getBootstrap()->bootstrap('view');
206 $view = $this->getBootstrap()->getResource('view');
213 <para>En el uso normal, se podría instanciar la aplicación, arrancarla, y
216 <programlisting language="php"><![CDATA[
217 $application = new Zend_Application(...);
218 $application->bootstrap()
222 <para>Para un script personalizado, se podría necesitar simplemente
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();
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
242 <programlisting language="php"><![CDATA[
243 $application = new Zend_Application(...);
244 $application->getBootstrap()->bootstrapDb();