| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="migration.15">
- <title>Zend Framework 1.5</title>
- <para>
- Wenn man von einem älteren Release auf Zend Framework 1.5 oder höher hochrüstet sollte
- man die folgenden Migrations Hinweise beachten.
- </para>
- <sect2 id="migration.15.zend.controller">
- <title>Zend_Controller</title>
- <para>
- Obwohl die meisten grundsätzlichen Funktionalitäten die gleichen bleiben und alle
- dokumentierten Funktionalitäten die gleichen bleiben gibt es doch ein spezielles
- <emphasis>undokumentiertes</emphasis> "Feature" das geändert wurde.
- </para>
- <para>
- Wenn <acronym>URL</acronym>s geschrieben werden besteht der dokumentierte Weg darin die
- Aktionsnamen camelCased mit einem Trennzeichen zu schreiben; diese sind normalerweise
- '.' oder '-', können aber im Dispatcher konfiguriert werden. Der Dispatcher ändert den
- Aktionsnamen intern auf Kleinschreibung und verwendet diese Trennzeichen um die
- Aktionsmethode wieder zu bauen indem er sie camelCase schreibt. Trotzdem, weil
- <acronym>PHP</acronym> Funktionen nicht unabhängig von der Schreibweise sind,
- <emphasis>könnte</emphasis> man <acronym>URL</acronym>s mit camelCase schreiben und der
- Dispatcher würde diese auf den gleichen Platz auflösen. Zum Beispiel, 'camel-cased'
- würde durch den Dispatcher zu 'camelCasedAction' werden; trotzdem, durch den Fall der
- unabhängigen Schreibweise in <acronym>PHP</acronym>, würden beide die selbe Methode
- ausführen.
- </para>
- <para>
- Das führt zu Problemen mit dem ViewRenderer wenn View Skripte aufgelöst werden. Der
- kanonische, dokumentierte Weg besteht darin das alle Trennzeichen zu Bindestrichen
- umgewandelt und die Wörter kleingeschrieben werden. Das erzeugt eine semantische
- Bindung zwischen Aktionen und View Skripten, und die Normalisierung stellt sicher
- das die Skripte gefunden werden. Trotzdem, wenn die Aktion 'camelCased' aufgerufen und
- aufgelöst wird, ist das Trennzeichen nicht mehr vorhanden, und der ViewRenderer
- versucht einen anderen Ort aufzulösen -- <filename>camelcased.phtml</filename> statt
- <filename>camel-cased.phtml</filename>.
- </para>
- <para>
- Einige Entwickler hängen an diesem "Feature", welches nie angedacht war. Verschiedene
- Änderungen im 1.5.0 Baum, führen dazu das der ViewRenderer diese Pfade nicht länger
- auflöst; die semantische Bindung wird nun erzwungen. Ale erstes, erzwingt der
- Dispatcher nun die Groß-/Kleinschreibung in Aktionsnamen. Das bedeutet dass das
- hinleiten zu eigenen Aktionen über die URL durch Verwendung von camelCase nicht länger
- auf die gleiche Methode aufgelöst wird wie mit Trennzeichen (z.B. 'camel-casing').
- Das führt dazu das der ViewRenderer jetzt nur mehr zeichen-getrennte Aktionen
- honoriert wenn er View Skripte auflöst.
- </para>
- <para>
- Wenn man findet das man auf dieses "Feature" nicht verzichten kann gibt es mehrere
- Optionen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Beste Option: Die View Skripte umbenennen. Vorteile: zukünftige Kompatibilität.
- Nachteile: Wenn man viele View Skripte hat die auf dem vorigen aufbauen führt
- das, unerwarteter Weise, zu vielen Umbenennungen die durchgeführt werden müssen.
- </para>
- </listitem>
- <listitem>
- <para>
- Zweitbeste Option: Der ViewRenderer delegiert nun die Auflösung von View
- Skripten zu <classname>Zend_Filter_Inflector</classname>; man kann die Regeln
- des Inflectors ändern damit er nicht länger die Wörter der Aktion mit einem
- Bindestrich trennt:
- </para>
- <programlisting language="php"><![CDATA[
- $viewRenderer =
- Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
- $inflector = $viewRenderer->getInflector();
- $inflector->setFilterRule(':action', array(
- new Zend_Filter_PregReplace(
- '#[^a-z0-9' . preg_quote(DIRECTORY_SEPARATOR, '#') . ']+#i',
- ''
- ),
- 'StringToLower'
- ));
- ]]></programlisting>
- <para>
- Der obige Code ändert den Inflector so, das er Wörter nicht länger mit einem
- Bindestrich trennt; Es kann auch gewünscht sein den 'StringToLower' Filter zu
- entfernen man die aktuellen View Skripte camelCased benannt haben
- <emphasis>will</emphasis>.
- </para>
- <para>
- Wenn die Umbenennung der View Skripte zu aufwendig oder Zeitintensiv ist, dann
- ist das die beste Option wenn man die Zeit hierfür findet.
- </para>
- </listitem>
- <listitem>
- <para>
- Die am wenigsten zu empfehlende Option: Man kann den Dispatcher dazu zwingen
- camelCase Aktionsnamen mit einem neuen Front Controller Flag
- <property>useCaseSensitiveActions</property> zu bearbeiten:
- </para>
- <programlisting language="php"><![CDATA[
- $front->setParam('useCaseSensitiveActions', true);
- ]]></programlisting>
- <para>
- Das erlaubt es camelCase in der URL zu verwenden uns es trotzdem auf die
- gleiche Aktion aufzulösen wie wenn Trennzeichen verwendet worden wären. Das
- bedeutet dass das Originale Problem trotzdem durchschlägt; es kann notwendig
- sein die zweite Option von oben zusätzlich zu verwenden um sicherzustellen
- das die Dinge in allen Variationen funktionieren.
- </para>
- <para>
- Man sollte auch beachten das die Verwendung dieses Flags eine Notiz auslöst,
- das dessen Verwendung nicht mehr durchgeführt werden sollte.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|