| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="migration.10">
- <title>Zend Framework 1.0</title>
- <para>
- Wenn man von einem älteren Release auf Zend Framework 1.0 oder höher hochrüstet sollte
- man die folgenden Migrations Hinweise beachten.
- </para>
- <sect2 id="migration.10.zend.controller">
- <title>Zend_Controller</title>
- <para>
- Die prinzipiellen Änderungen die durch 1.0.0RC1 angeboten werden sind die Einführung und
- standardmäßige Aktivierung des
- <link linkend="zend.controller.plugins.standard.errorhandler">ErrorHandler</link>
- Plugins und den
- <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>
- Aktionhelfer. Bitte lies die Dokumentation jedes einzelnen gründlich um zu sehen wie sie
- arbeiten und welchen Effekt Sie auf die eigene Anwendung haben können.
- </para>
- <para>
- Der <classname>ErrorHandler</classname> Plugin läuft wärend der
- <methodname>postDispatch()</methodname> Prüfung auf Ausnahmen, und leitet zu einem
- spezifizierten Fehlerhandler Controller weiter. Solch ein Controller sollte in der
- eigenen Anwendung inkludiert werden. Er kann deaktiviert werden durch das setzen des
- Frontcontroller Parameters <property>noErrorHandler</property>:
- </para>
- <programlisting language="php"><![CDATA[
- $front->setParam('noErrorHandler', true);
- ]]></programlisting>
- <para>
- Der <classname>ViewRenderer</classname> Aktionhelfer automatisiert die Injizierung der
- View in den Aktioncontroller genauso wie das autorendern von Viewskripten basierend auf
- die aktuelle Aktion. Das primäre Problem dem man begegnen kann ist, wenn man Aktionen
- hat die keine View Skripte rendern und weder vorwärts- noch weiterleiten, da der
- <classname>ViewRenderer</classname> versucht ein View Skript zu Rendern basierend auf
- dem Aktionnamen.
- </para>
- <para>
- Es gibt verschiedene Strategien die man anwenden kann um den eigenen Code upzudaten. In
- kurzer Form, kann man global den <classname>ViewRenderer</classname> im eigenen
- Frontcontroller Bootstrap vor dem Abarbeiten ausschalten:
- </para>
- <programlisting language="php"><![CDATA[
- // Annahme das $front eine Instanz von Zend_Controller_Front ist
- $front->setParam('noViewRenderer', true);
- ]]></programlisting>
- <para>
- Trotzdem ist es keine gute Langzeitstrategie, da es auch bedeutet das man mehr Code
- schreiben muß.
- </para>
- <para>
- Wenn man bereit ist damit zu beginnen die <classname>ViewRenderer</classname>
- Funktionalität zu verwenden, gibt es verschiedene Dinge die man im eigenen
- Controllercode beachten muß. Zuerst muß auf die Aktionmethoden (die Methoden die mit
- 'Action' enden) geachtet werden, und ausgesucht werden was eine jede machen soll. Wenn
- nichts vom folgenden passiert, muß man Änderungen durchführen:
- </para>
- <itemizedlist>
- <listitem><para>Aufruf von <command>$this->render();</command></para></listitem>
- <listitem><para>Aufruf von <command>$this->_forward();</command></para></listitem>
- <listitem><para>Aufruf von <command>$this->_redirect();</command></para></listitem>
- <listitem>
- <para>Aufruf des <classname>Redirector</classname> Aktionhelfers</para>
- </listitem>
- </itemizedlist>
- <para>
- Die einfachste Änderung ist das Ausschalten des Auto-Rendering für diese Methode:
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->viewRenderer->setNoRender();
- ]]></programlisting>
- <para>
- Wenn man herausfindet das keine der eigenen Aktionmethoden rendern, weiterleiten oder
- umleiten, wird man voraussichtlich die oben angeführte Zeile in die eigene
- <methodname>preDispatch()</methodname> oder <methodname>init()</methodname> Methode
- einfügen wollen:
- </para>
- <programlisting language="php"><![CDATA[
- public function preDispatch()
- {
- // Ausschalten des autorendern vom View Skript
- $this->_helper->viewRenderer->setNoRender()
- // .. andere Dinge tun...
- }
- ]]></programlisting>
- <para>
- Wenn <methodname>render()</methodname> aufgerufen wird, und man
- <link linkend="zend.controller.modular">die konventionelle Modulare Verzeichnis
- Struktur</link> verwendet, wird man den Code ändern wollen um Autorendern zu
- Verwenden:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Wenn man mehrere View Skripte in einer einzelnen Aktion rendert muß nichts
- geändert werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Wenn man einfach <methodname>render()</methodname> ohne Argumente aufruft,
- können diese Zeilen entfernt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Wenn man <methodname>render()</methodname> mit Argumenten aufruft, und danach
- nicht irgendeine Bearbeitung durchführt oder mehrere View sktipe rendert, können
- diese Aufrufe zu <command>$this->_helper->viewRenderer();</command> geändert
- werden.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Wenn die konventionelle modulare Verzeichnisstruktur nicht verwendet wird, gibt es eine
- Vielzahl von Methoden für das Setzen des View Basispfades und der Skript
- Pfadspezifikationen so das man den <classname>ViewRenderer</classname> verwenden kann.
- Bitte lies die <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer
- Dokumentation</link> für Informationen über diese Methoden.
- </para>
- <para>
- Wenn ein View Objekt von der Registry verwendet, oder das eigene View Objekt verändert,
- oder eine andere View Implementation verwendet wird, dann wird man den
- <classname>ViewRenderer</classname> in diesem Objekt injiziieren wollen. Das kann ganz
- einfach jederzeit durchgeführt werden.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Vor dem Verarbeiten einer Frontcontroller Instanz:
- </para>
- <programlisting language="php"><![CDATA[
- // Annahme das $view bereits definiert wurde
- $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
- Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>
- Jederzeit wärend des Bootstrap Prozesses:
- </para>
- <programlisting language="php"><![CDATA[
- $viewRenderer =
- Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
- $viewRenderer->setView($view);
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- <para>
- Es gibt viele Wege den <classname>ViewRenderer</classname> zu modifizieren inklusive dem
- Setzen eines anderen View Skripts zum Rendern, dem Spezifizieren von Veränderungen für
- alle veränderbaren Elemente eines View Skript Pfades (inklusive der Endung), dem
- Auswählen eines Antwort-benannten Segments zur Anpassung und mehr. Wenn die
- konventionelle modulare Verzeichnisstruktur nicht verwendet wird, kann noch immer eine
- andere Pfad Spezifikation mit dem <classname>ViewRenderer</classname> zugeordnet werden.
- </para>
- <para>
- Wir empfehlen die Adaptierung des eigenen Codes um den
- <classname>ErrorHandler</classname> und <classname>ViewRenderer</classname> zu verwenden
- da diese neue Kernfunktionalitäten sind.
- </para>
- </sect2>
- <sect2 id="migration.10.zend.currency">
- <title>Zend_Currency</title>
- <para>
- Die Erstellung von <classname>Zend_Currency</classname> wurde vereinfacht.
- Es muß nicht länger ein Skript angegeben oder auf <constant>NULL</constant> gesetzt
- werden. Der optionale script Parameter ist jetzt eine Option welche durch die
- <methodname>setFormat()</methodname> Methode gesetzt werden kann.
- </para>
- <programlisting language="php"><![CDATA[
- $currency = new Zend_Currency($currency, $locale);
- ]]></programlisting>
- <para>
- Die <methodname>setFormat()</methodname> Methode nimmt jetzt ein Array von Optionen.
- Diese Optionen werden permanent gesetzt und überschreiben alle vorher gesetzten Werte.
- Auch eine neue Option 'precision' wurde integriert. Die folgenden Optionen wurden
- überarbeitet:
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para><emphasis>position</emphasis>: Ersetzt den alten 'rules' Parameter.</para>
- </listitem>
- <listitem>
- <para><emphasis>script</emphasis>: Ersetzt den alten 'script' Parameter.</para>
- </listitem>
- <listitem>
- <para>
- <emphasis>format</emphasis>: Ersetzt den alten 'locale' Parameter welcher keine
- neue Währung, sondern nur das Format der Nummern setzt.
- </para>
- </listitem>
- <listitem>
- <para><emphasis>display</emphasis>: Ersetzt den alten 'rules' Parameter.</para>
- </listitem>
- <listitem><para><emphasis>precision</emphasis>: Neuer Parameter.</para></listitem>
- <listitem>
- <para>
- <emphasis>name</emphasis>: Ersetzt den alten 'rules' Parameter. Setzt den
- vollständigen Namen der Währung.
- </para>
- </listitem>
- <listitem><para><emphasis>currency</emphasis>: Neuer Parameter.</para></listitem>
- <listitem><para><emphasis>symbol</emphasis>: Neuer Parameter.</para></listitem>
- </itemizedlist>
- <programlisting language="php"><![CDATA[
- $currency->setFormat(array $options);
- ]]></programlisting>
- <para>
- Die <methodname>toCurrency()</methodname> Methode unterstützt die optionalen 'script'
- und 'locale' Parameter nicht mehr. Stattdessen nimmt sie ein Array von Optionen welche
- die selben Schlüssel enthalten können wie die <methodname>setFormat()</methodname>
- Methode.
- </para>
- <programlisting language="php"><![CDATA[
- $currency->toCurrency($value, array $options);
- ]]></programlisting>
- <para>
- Die Methoden <methodname>getSymbol()</methodname>,
- <methodname>getShortName()</methodname>, <methodname>getName()</methodname>,
- <methodname>getRegionList()</methodname> und <methodname>getCurrencyList()</methodname>
- sind nicht länger statisch und können vom Objekt aus aufgerufen werden. Die geben den
- aktuell gesetzten Wert des Objekts zurück wenn kein Parameter gesetzt wurde.
- </para>
- </sect2>
- </sect1>
|