Zend_Application-Examples.xml 7.5 KB

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