Zend_Application-Examples.xml 7.5 KB

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