2
0

Zend_Application-Examples.xml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15823 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.application.examples">
  5. <title>Beispiele</title>
  6. <para>
  7. Die Bootstrap Klasse selbst wird typischerweise sehr minimal sein; oft wird sie einfach
  8. nur ein leerer Stub sein der die Basis Bootstrapping Klasse erweitert:
  9. </para>
  10. <programlisting language="php"><![CDATA[
  11. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  12. {
  13. }
  14. ]]></programlisting>
  15. <para>
  16. Mit einer entsprechenden Konfigurationsdatei:
  17. </para>
  18. <programlisting language="ini"><![CDATA[
  19. ; APPLICATION_PATH/configs/application.ini
  20. [production]
  21. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  22. bootstrap.class = "Bootstrap"
  23. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  24. [development : testing]
  25. [development : production]
  26. ]]></programlisting>
  27. <para>
  28. Sollten trotzdem, eigene Initialisierungen notwendig sein, hat man zwei Möglichkeiten.
  29. Erstens, kann man Methoden schreiben die mit <emphasis>_init</emphasis> anfangen um eigenen
  30. Code zu spezifizieren der für das Bootstrapping verwendet werden soll. Diese Methoden
  31. werden durch <methodname>bootstrap()</methodname> aufgerufen, und können genauso aufgerufen
  32. werden wie wenn Sie öffentliche Methoden wären:
  33. <emphasis>bootstrap&lt;resource&gt;()</emphasis>. Sie sollten ein optionales Array an
  34. Optionen akzeptieren.
  35. </para>
  36. <para>
  37. Wenn die eigene Ressource Methode einen Wert zurückgibt, wird diese in einem Container
  38. im Bootstrap gespeichert. Das kann nützlich sein wenn verschiedene Ressourcen interagieren
  39. müssen (wie wenn eine Ressource sich selbst in eine andere Iniziiert). Die Methode
  40. <methodname>getResource()</methodname> kann dann verwendet werden um diese Werte zu
  41. erhalten.
  42. </para>
  43. <para>
  44. Das Beispiel anbei zwigt eine Ressource Methode für die Initialisierung des Anfrage
  45. Objekts. Es verwendet die Erkennung der Abhängigkeit (diese hängt von der Front Controller
  46. Ressource ab), holt eine Ressource vom Bootstrap, und gibt einen Wert zurück um Ihn im
  47. Bootstrap zu speichern.
  48. </para>
  49. <programlisting language="php"><![CDATA[
  50. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  51. {
  52. protected function _initRequest(array $options = array())
  53. {
  54. // Sicherstellen das eine Front Controller Instanz vorhanden ist
  55. // und diese holen
  56. $this->bootstrap('FrontController');
  57. $front = $this->getResource('FrontController');
  58. // Das Anfrage Objekt initialisieren
  59. $request = new Zend_Controller_Request_Http();
  60. $request->setBaseUrl('/foo');
  61. // Sie dem Front Controller hinzufügen
  62. $front->setRequest($request);
  63. // Bootstrap speichert den Wert im 'request' Schlüssel
  64. // seines Containers
  65. return $request;
  66. }
  67. }
  68. ]]></programlisting>
  69. <para>
  70. Beachte in diesem Beispiel den Aufruf von <methodname>bootstrap()</methodname>; dieser
  71. stellt sicher das der Front Controlle initialisiert wurde before die Methode aufgerufen
  72. wird. Dieser Aufruf kann entweder eine Ressource oder eine andere Methode in der Klasse
  73. auslösen.
  74. </para>
  75. <para>
  76. Die andere Option ist die Verwendung eines Ressource Plugins. Ressource Plugins sind
  77. Objekte die spezielle Initialisierungen ausführen, und die wie folgt spezifiziert werden
  78. können:
  79. </para>
  80. <itemizedlist>
  81. <listitem>
  82. <para>
  83. Wärend der Instanzierung des <classname>Zend_Application</classname> Objekts
  84. </para>
  85. </listitem>
  86. <listitem>
  87. <para>
  88. Wärend der Initialisierung des Bootstrap Objekts
  89. </para>
  90. </listitem>
  91. <listitem>
  92. <para>
  93. Durch explizites einschalten über Methodenaufrufe auf dem Bootstrap Objekt
  94. </para>
  95. </listitem>
  96. </itemizedlist>
  97. <para>
  98. Ressource Plugins implementieren <classname>Zend_Application_Bootstrap_Resource</classname>,
  99. welche einfach definieren das Sie Injektion des Aufrufers und von Optionen erlauben, und die
  100. eine <methodname>init()</methodname> Methode haben. Als Beispiel, könnte eine eigene "View"
  101. Bootstrap Ressource wie folgt aussehen:
  102. </para>
  103. <programlisting language="php"><![CDATA[
  104. class My_Bootstrap_Resource_View
  105. extends Zend_Application_Resource_ResourceAbstract
  106. {
  107. public function init()
  108. {
  109. $view = new Zend_View($this->_getOptions());
  110. Zend_Dojo::enableView($view);
  111. $view->doctype('XHTML1_STRICT');
  112. $view->headTitle()->setSeparator(' - ')->append('Meine Site');
  113. $view->headMeta()->appendHttpEquiv('Content-Type',
  114. 'text/html; charset=utf-8');
  115. $view->dojo()->setDjConfigOption('parseOnLoad', true)
  116. ->setLocalPath('/js/dojo/dojo.js')
  117. ->registerModulePath('../spindle', 'spindle')
  118. ->addStylesheetModule('spindle.themes.spindle')
  119. ->requireModule('spindle.main')
  120. ->disable();
  121. $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
  122. 'ViewRenderer'
  123. );
  124. $viewRenderer->setView($view);
  125. return $view;
  126. }
  127. }
  128. ]]></programlisting>
  129. <para>
  130. Um der Bootstrap zu sagen das sie das verwenden soll, würde man entweder den Klassennamen
  131. der Ressource übergeben müssen, oder eine Kombination eines Plugin Loader Präfix Pfades
  132. und den Kurznamen der Ressource (z.B. "view"):
  133. </para>
  134. <programlisting language="php"><![CDATA[
  135. $application = new Zend_Application(
  136. APPLICATION_ENV,
  137. array(
  138. 'resources' => array(
  139. 'My_Bootstrap_Resource_View' => array(), // kompletter Klassenname; ODER
  140. 'view', // Kurzname
  141. 'FrontController' => array(
  142. 'controllerDirectory' => APPLICATION_PATH . '/controllers',
  143. ),
  144. ),
  145. // Für Kurznamen, definiere die Plugin Pfade:
  146. 'pluginPaths = array(
  147. 'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
  148. )
  149. )
  150. );
  151. ]]></programlisting>
  152. <para>
  153. Ressourcen können andere Ressourcen und Initialisierungen aufrufen indem Sie auf den
  154. Eltern-Bootstrap zugreifen:
  155. </para>
  156. <programlisting language="php"><![CDATA[
  157. class My_Bootstrap_Resource_Layout
  158. extends Zend_Application_Resource_ResourceAbstract
  159. {
  160. public function init()
  161. {
  162. // Sicherstellen das die View initialisiert ist...
  163. $this->getBootstrap()->bootstrap('view');
  164. // Das View Objekt erhalten
  165. $view = $this->getBootstrap()->getResource('view');
  166. // ...
  167. }
  168. }
  169. ]]></programlisting>
  170. <para>
  171. Bei normaler Verwendung würde man die Anwendung instanziieren, sie bootstrappen, und
  172. anschließend ausführen:
  173. </para>
  174. <programlisting language="php"><![CDATA[
  175. $application = new Zend_Application(...);
  176. $application->bootstrap()
  177. ->run();
  178. ]]></programlisting>
  179. <para>
  180. Für ein eigenes Skript müsste man einfach spezifische Ressourcen initialisieren:
  181. </para>
  182. <programlisting language="php"><![CDATA[
  183. $application = new Zend_Application(...);
  184. $application->getBootstrap('db');
  185. $service = new Zend_XmlRpc_Server();
  186. $service->setClass('Foo'); // Verwende die Datenbank...
  187. echo $service->handle();
  188. ]]></programlisting>
  189. <para>
  190. Statt der Verwendung der <methodname>bootstrap()</methodname> Methode um interne Methode
  191. oder Ressourcen aufzurufen, kann man auch Überladung verwenden:
  192. </para>
  193. <programlisting language="php"><![CDATA[
  194. $application = new Zend_Application(...);
  195. $application->getBootstrapDb();
  196. ]]></programlisting>
  197. </sect1>