migration-10.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 18781 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="migration.10">
  5. <title>Zend Framework 1.0</title>
  6. <para>
  7. Wenn man von einem älteren Release auf Zend Framework 1.0 oder höher hochrüstet sollte
  8. man die folgenden Migrations Hinweise beachten.
  9. </para>
  10. <sect2 id="migration.10.zend.controller">
  11. <title>Zend_Controller</title>
  12. <para>
  13. Die prinzipiellen Änderungen die durch 1.0.0RC1 angeboten werden sind die Einführung und
  14. standardmäßige Aktivierung des
  15. <link linkend="zend.controller.plugins.standard.errorhandler">ErrorHandler</link>
  16. Plugins und den
  17. <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>
  18. Aktionhelfer. Bitte lies die Dokumentation jedes einzelnen gründlich um zu sehen wie sie
  19. arbeiten und welchen Effekt Sie auf die eigene Anwendung haben können.
  20. </para>
  21. <para>
  22. Der <classname>ErrorHandler</classname> Plugin läuft wärend der
  23. <methodname>postDispatch()</methodname> Prüfung auf Ausnahmen, und leitet zu einem
  24. spezifizierten Fehlerhandler Controller weiter. Solch ein Controller sollte in der
  25. eigenen Anwendung inkludiert werden. Er kann deaktiviert werden durch das setzen des
  26. Frontcontroller Parameters <property>noErrorHandler</property>:
  27. </para>
  28. <programlisting language="php"><![CDATA[
  29. $front->setParam('noErrorHandler', true);
  30. ]]></programlisting>
  31. <para>
  32. Der <classname>ViewRenderer</classname> Aktionhelfer automatisiert die Injizierung der
  33. View in den Aktioncontroller genauso wie das autorendern von Viewskripten basierend auf
  34. die aktuelle Aktion. Das primäre Problem dem man begegnen kann ist, wenn man Aktionen
  35. hat die keine View Skripte rendern und weder vorwärts- noch weiterleiten, da der
  36. <classname>ViewRenderer</classname> versucht ein View Skript zu Rendern basierend auf
  37. dem Aktionnamen.
  38. </para>
  39. <para>
  40. Es gibt verschiedene Strategien die man anwenden kann um den eigenen Code upzudaten. In
  41. kurzer Form, kann man global den <classname>ViewRenderer</classname> im eigenen
  42. Frontcontroller Bootstrap vor dem Abarbeiten ausschalten:
  43. </para>
  44. <programlisting language="php"><![CDATA[
  45. // Annahme das $front eine Instanz von Zend_Controller_Front ist
  46. $front->setParam('noViewRenderer', true);
  47. ]]></programlisting>
  48. <para>
  49. Trotzdem ist es keine gute Langzeitstrategie, da es auch bedeutet das man mehr Code
  50. schreiben muß.
  51. </para>
  52. <para>
  53. Wenn man bereit ist damit zu beginnen die <classname>ViewRenderer</classname>
  54. Funktionalität zu verwenden, gibt es verschiedene Dinge die man im eigenen
  55. Controllercode beachten muß. Zuerst muß auf die Aktionmethoden (die Methoden die mit
  56. 'Action' enden) geachtet werden, und ausgesucht werden was eine jede machen soll. Wenn
  57. nichts vom folgenden passiert, muß man Änderungen durchführen:
  58. </para>
  59. <itemizedlist>
  60. <listitem>
  61. <para>Aufruf von <command>$this->render();</command></para>
  62. </listitem>
  63. <listitem>
  64. <para>Aufruf von <command>$this->_forward();</command></para>
  65. </listitem>
  66. <listitem>
  67. <para>Aufruf von <command>$this->_redirect();</command></para>
  68. </listitem>
  69. <listitem>
  70. <para>Aufruf des <classname>Redirector</classname> Aktionhelfers</para>
  71. </listitem>
  72. </itemizedlist>
  73. <para>
  74. Die einfachste Änderung ist das Ausschalten des Auto-Rendering für diese Methode:
  75. </para>
  76. <programlisting language="php"><![CDATA[
  77. $this->_helper->viewRenderer->setNoRender();
  78. ]]></programlisting>
  79. <para>
  80. Wenn man herausfindet das keine der eigenen Aktionmethoden rendern, weiterleiten oder
  81. umleiten, wird man voraussichtlich die oben angeführte Zeile in die eigene
  82. <methodname>preDispatch()</methodname> oder <methodname>init()</methodname> Methode
  83. einfügen wollen:
  84. </para>
  85. <programlisting language="php"><![CDATA[
  86. public function preDispatch()
  87. {
  88. // Ausschalten des autorendern vom View Skript
  89. $this->_helper->viewRenderer->setNoRender()
  90. // .. andere Dinge tun...
  91. }
  92. ]]></programlisting>
  93. <para>
  94. Wenn <methodname>render()</methodname> aufgerufen wird, und man
  95. <link linkend="zend.controller.modular">die konventionelle Modulare Verzeichnis
  96. Struktur</link> verwendet, wird man den Code ändern wollen um Autorendern zu
  97. Verwenden:
  98. </para>
  99. <itemizedlist>
  100. <listitem>
  101. <para>
  102. Wenn man mehrere View Skripte in einer einzelnen Aktion rendert muß nichts
  103. geändert werden.
  104. </para>
  105. </listitem>
  106. <listitem>
  107. <para>
  108. Wenn man einfach <methodname>render()</methodname> ohne Argumente aufruft,
  109. können diese Zeilen entfernt werden.
  110. </para>
  111. </listitem>
  112. <listitem>
  113. <para>
  114. Wenn man <methodname>render()</methodname> mit Argumenten aufruft, und danach
  115. nicht irgendeine Bearbeitung durchführt oder mehrere View sktipe rendert, können
  116. diese Aufrufe zu <command>$this->_helper->viewRenderer();</command> geändert
  117. werden.
  118. </para>
  119. </listitem>
  120. </itemizedlist>
  121. <para>
  122. Wenn die konventionelle modulare Verzeichnisstruktur nicht verwendet wird, gibt es eine
  123. Vielzahl von Methoden für das Setzen des View Basispfades und der Skript
  124. Pfadspezifikationen so das man den <classname>ViewRenderer</classname> verwenden kann.
  125. Bitte lies die <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer
  126. Dokumentation</link> für Informationen über diese Methoden.
  127. </para>
  128. <para>
  129. Wenn ein View Objekt von der Registry verwendet, oder das eigene View Objekt verändert,
  130. oder eine andere View Implementation verwendet wird, dann wird man den
  131. <classname>ViewRenderer</classname> in diesem Objekt injiziieren wollen. Das kann ganz
  132. einfach jederzeit durchgeführt werden.
  133. </para>
  134. <itemizedlist>
  135. <listitem>
  136. <para>
  137. Vor dem Verarbeiten einer Frontcontroller Instanz:
  138. </para>
  139. <programlisting language="php"><![CDATA[
  140. // Annahme das $view bereits definiert wurde
  141. $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
  142. Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
  143. ]]></programlisting>
  144. </listitem>
  145. <listitem>
  146. <para>
  147. Jederzeit wärend des Bootstrap Prozesses:
  148. </para>
  149. <programlisting language="php"><![CDATA[
  150. $viewRenderer =
  151. Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
  152. $viewRenderer->setView($view);
  153. ]]></programlisting>
  154. </listitem>
  155. </itemizedlist>
  156. <para>
  157. Es gibt viele Wege den <classname>ViewRenderer</classname> zu modifizieren inklusive dem
  158. Setzen eines anderen View Skripts zum Rendern, dem Spezifizieren von Veränderungen für
  159. alle veränderbaren Elemente eines View Skript Pfades (inklusive der Endung), dem
  160. Auswählen eines Antwort-benannten Segments zur Anpassung und mehr. Wenn die
  161. konventionelle modulare Verzeichnisstruktur nicht verwendet wird, kann noch immer eine
  162. andere Pfad Spezifikation mit dem <classname>ViewRenderer</classname> zugeordnet werden.
  163. </para>
  164. <para>
  165. Wir empfehlen die Adaptierung des eigenen Codes um den
  166. <classname>ErrorHandler</classname> und <classname>ViewRenderer</classname> zu verwenden
  167. da diese neue Kernfunktionalitäten sind.
  168. </para>
  169. </sect2>
  170. <sect2 id="migration.10.zend.currency">
  171. <title>Zend_Currency</title>
  172. <para>
  173. Die Erstellung von <classname>Zend_Currency</classname> wurde vereinfacht.
  174. Es muß nicht länger ein Skript angegeben oder auf <constant>NULL</constant> gesetzt
  175. werden. Der optionale script Parameter ist jetzt eine Option welche durch die
  176. <methodname>setFormat()</methodname> Methode gesetzt werden kann.
  177. </para>
  178. <programlisting language="php"><![CDATA[
  179. $currency = new Zend_Currency($currency, $locale);
  180. ]]></programlisting>
  181. <para>
  182. Die <methodname>setFormat()</methodname> Methode nimmt jetzt ein Array von Optionen.
  183. Diese Optionen werden permanent gesetzt und überschreiben alle vorher gesetzten Werte.
  184. Auch eine neue Option 'precision' wurde integriert. Die folgenden Optionen wurden
  185. überarbeitet:
  186. </para>
  187. <itemizedlist mark='opencircle'>
  188. <listitem>
  189. <para>
  190. <emphasis>position</emphasis>:
  191. Ersetzt den alten 'rules' Parameter.
  192. </para>
  193. </listitem>
  194. <listitem>
  195. <para>
  196. <emphasis>script</emphasis>:
  197. Ersetzt den alten 'script' Parameter.
  198. </para>
  199. </listitem>
  200. <listitem>
  201. <para>
  202. <emphasis>format</emphasis>:
  203. Ersetzt den alten 'locale' Parameter welcher keine neue Währung, sondern
  204. nur das Format der Nummern setzt.
  205. </para>
  206. </listitem>
  207. <listitem>
  208. <para>
  209. <emphasis>display</emphasis>:
  210. Ersetzt den alten 'rules' Parameter.
  211. </para>
  212. </listitem>
  213. <listitem>
  214. <para>
  215. <emphasis>precision</emphasis>:
  216. Neuer Parameter.
  217. </para>
  218. </listitem>
  219. <listitem>
  220. <para>
  221. <emphasis>name</emphasis>: Ersetzt den alten 'rules' Parameter. Setzt den
  222. vollständigen Namen der Währung.
  223. </para>
  224. </listitem>
  225. <listitem>
  226. <para>
  227. <emphasis>currency</emphasis>:
  228. Neuer Parameter.
  229. </para>
  230. </listitem>
  231. <listitem>
  232. <para>
  233. <emphasis>symbol</emphasis>:
  234. Neuer Parameter.
  235. </para>
  236. </listitem>
  237. </itemizedlist>
  238. <programlisting language="php"><![CDATA[
  239. $currency->setFormat(array $options);
  240. ]]></programlisting>
  241. <para>
  242. Die <methodname>toCurrency()</methodname> Methode unterstützt die optionalen 'script'
  243. und 'locale' Parameter nicht mehr. Stattdessen nimmt sie ein Array von Optionen welche
  244. die selben Schlüssel enthalten können wie die <methodname>setFormat()</methodname>
  245. Methode.
  246. </para>
  247. <programlisting language="php"><![CDATA[
  248. $currency->toCurrency($value, array $options);
  249. ]]></programlisting>
  250. <para>
  251. Die Methoden <methodname>getSymbol()</methodname>,
  252. <methodname>getShortName()</methodname>, <methodname>getName()</methodname>,
  253. <methodname>getRegionList()</methodname> und <methodname>getCurrencyList()</methodname>
  254. sind nicht länger statisch und können vom Objekt aus aufgerufen werden. Die geben den
  255. aktuell gesetzten Wert des Objekts zurück wenn kein Parameter gesetzt wurde.
  256. </para>
  257. </sect2>
  258. </sect1>
  259. <!--
  260. vim:se ts=4 sw=4 et:
  261. -->