Zend_Application-Examples.xml 7.8 KB

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