| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="migration.110">
- <title>Zend Framework 1.10</title>
- <para>
- Wenn man von einem älteren Release auf Zend Framework 1.10 oder höher hochrüstet sollte
- man die folgenden Migrations Hinweise beachten.
- </para>
- <sect2 id="migration.110.zend.controller.front">
- <title>Zend_Controller_Front</title>
- <para>
- Ein fehlerhaftes Verhalten wurde behoben, welches aufgetreten ist wenn keine Modell
- Route und keine Route mit der angegebenen Anfrage übereinstimmt. Vorher hat der Router
- das nicht modifizierte Anfrageobjekt zurückgegeben, und der Frontcontroller hat damit
- nur den Standardcontroller und die Standardaktion angezeigt. Seit Zend Framework 1.10
- wirft der Router korrekterweise, wie im Router Interface beschrieben, eine Exception
- wenn keine passende Route vorhanden ist. Das Error Plugin fängt die Exception und leitet
- Sie an den Errorcontroller weiter. Man kann mit der Konstante
- <constant>Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE</constant> auf einen
- spezifischen Fehler testen:
- </para>
- <programlisting language="php"><![CDATA[
- /**
- * Vor 1.10
- */
- public function errorAction()
- {
- $errors = $this->_getParam('error_handler');
- switch ($errors->type) {
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
- // ...
- /**
- * Ab 1.10
- */
- public function errorAction()
- {
- $errors = $this->_getParam('error_handler');
- switch ($errors->type) {
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
- // ...
- ]]></programlisting>
- </sect2>
- <sect2 id="migration.110.zend.feed.reader">
- <title>Migrating from 1.9.6 to 1.10 or later</title>
- <para>
- Mit der Einführung von Zend Framework 1.10 wurde die Behandlung für das Empfangen von
- Autoren und Entwicklern in <classname>Zend_Feed_Reader</classname> geändert. Diese
- Änderung war ein Weg die Behandlung solcher Daten zwischen RSS und Atom Klassen zwischen
- den Komponenten zu harmonisieren und die Rückgabe von Autoren und Entwicklern in einer
- besseren, verwendbareren und detailuerteren Form zu ermöglichen. Das korrigiert auch
- einen Fehler bei dem angenommen wurde das jedes Autor Element auf einen Namen zeigt.
- In RSS ist das falsch, da ein Autor Element aktuell nur eine Email Adresse anbieten
- muss. Zusätzlich fügte die originale Implementation seine RSS Limits bei Atom Feeds
- hinzu was zu einer Reduzierung der Nützlichkeit des Parsers mit diesem Format führte.
- </para>
- <para>
- Die Änderung bedeutet das Methoden wie <methodname>getAuthors()</methodname> und
- <methodname>getContributors</methodname> nicht länger ein einfaches Array von Strings
- zurückgeben die von den relevanten RSS und Atom Elementen geparst wurden Statt dessen
- ist der Rückgabewert eine Unterklasse von <classname>ArrayObject</classname> die
- <classname>Zend_Feed_Reader_Collection_Author</classname> genannt wird und ein
- aufzählbares multidimensionales Array an Autoren simuliert. Jedes Mitglied dieses
- Objekts ist ein einfaches Array mit drei potentiellen Schlüsseln (wie in den
- Quelldaten erlaubt). Diese beinhalten name, email und uri.
- </para>
- <para>
- Das originale Verhalten dieser Methoden würde ein einfaches Array von Strings
- zurückgeben, wobei jeder String versucht einen einzelnen Namen zu präsentieren, aber in
- der Realität war dies nicht möglich da es keine Regel gibt die das Format der RSS
- Autor Strings leiten.
- </para>
- <para>
- Die einfachste Methode der Simulation des originalen Verhaltens dieser Methoden ist die
- Verwendung von <classname>Zend_Feed_Reader_Collection_Author</classname>'s
- <methodname>getValues()</methodname> welche auch ein einfaches Array an Strings
- darstellt und die "relevantesten Daten" repräsentiert. Für Autoren wird deren Name
- angenommen. Jeder Wert in resultierenden Array wird vom "name" Wert abgeleitet welcher
- jedem Autor angehängt ist (wenn vorhanden). In den meisten Fällen ist diese einfache
- Änderung einfach durchzuführen wie anbei demonstriert.
- </para>
- <programlisting language="php"><![CDATA[
- /**
- * In 1.9.6
- */
- $feed = Zend_Feed_Reader::import('http://example.com/feed');
- $authors = $feed->getAuthors();
- /**
- * Äquivalent in 1.10
- */
- $feed = Zend_Feed_Reader::import('http://example.com/feed');
- $authors = $feed->getAuthors()->getValues();
- ]]></programlisting>
- </sect2>
- <sect2 id="migration.110.zend.filter.html-entities">
- <title>Zend_Filter_HtmlEntities</title>
- <para>
- Um zu einem höheren Sicherheitsstandard für die Zeichenkodierung zu kommen, ist der
- Standardwert von <classname>Zend_Filter_HtmlEntities</classname> jetzt
- <acronym>UTF-8</acronym> statt <acronym>ISO-8859-1</acronym>.
- </para>
- <para>
- Zusätzlich, weil der aktuelle Mechanismus mit Zeichenkodierung handelt und nicht mit
- Zeichensets, wurden zwei Methoden hinzugefügt. <methodname>setEncoding()</methodname>
- und <methodname>getEncoding()</methodname>. Die vorhergehenden Methoden
- <methodname>setCharSet()</methodname> und <methodname>setCharSet()</methodname> sind
- jetzt deprecated und verweisen auf die neuen Methoden. Letztendlich, statt die
- geschützten Mitglieder in der <methodname>filter()</methodname> Methode direkt zu
- verwenden, werden Sie durch Ihre expliziten Zugriffsmethoden empfangen. Wenn man den
- Filter in der Vergangenheit erweitert hat, sollte man seinen Code und seine Unittests
- prüfen um sicherzustellen das weiterhin alles funktioniert.
- </para>
- </sect2>
- <sect2 id="migration.110.zend.filter.strip-tags">
- <title>Zend_Filter_StripTags</title>
- <para>
- <classname>Zend_Filter_StripTags</classname> enthielt in voehergehenden Versionen ein
- <varname>commentsAllowed</varname> Flag, welches es erlaubt hat <acronym>HTML</acronym>
- Kommentare in von dieser Klasse gefiltertem <acronym>HTML</acronym> Text als erlaubt zu
- markieren. Aber das öffnet den Weg für <acronym>XSS</acronym> Attacken, speziell im
- Internet Explorer (der es erlaubt konditionelle Funktionalität über
- <acronym>HTML</acronym> Kommentare zu spezifizieren). Beginnend mit Version 1.9.7 (und
- retour mit den Versionen 1.8.5 und 1.7.9), hat das <varname>commentsAllowed</varname>
- Flag keine Bedeutung meht, und alle <acronym>HTML</acronym> Kommentare, inklusive denen
- die andere <acronym>HTML</acronym> Tags oder untergeordnete Kommentare enthalten, werden
- von der endgültigen Aufgabe des Filters entfernt.
- </para>
- </sect2>
- <sect2 id="migration.110.zend.file.transfer">
- <title>Zend_File_Transfer</title>
- <sect3 id="migration.110.zend.file.transfer.files">
- <title>Sicherheitsänderung</title>
- <para>
- Aus Gründen der Sicherheit speichert <classname>Zend_File_Transfer</classname> nicht
- länger die originalen Mimetypen und Dateigrößen welche vom anfragenden Client
- angegeben wurden in seinem internen Speicher. Stattdessen werden die echten Werte
- bei der Instanzierung erkannt.
- </para>
- <para>
- Zusätzlich werden die originalen Werte in <varname>$_FILES</varname> bei der
- Instanzierung mit den echten Werten überschrieben. Das macht auch
- <varname>$_FILES</varname> sicher.
- </para>
- <para>
- Wenn man die originalen Werte benötigt, kann man diese entweder vor der
- Instanzierung von <classname>Zend_File_Transfer</classname> speichern, oder bei der
- Instanzierung die Option <property>disableInfos</property> verwenden. Es ist zu
- beachten das diese Option sinnlos ist wenn Sie nach der Instanzierung verwendet
- wird.
- </para>
- </sect3>
- <sect3 id="migration.110.zend.file.transfer.count">
- <title>Count Prüfung</title>
- <para>
- Vor dem Release 1.10 hat die <classname>MimeType</classname> Prüfung eine falsche
- Benennung verwendet. Aus Gründen der Konsistenz wurden die folgenden Konstanten
- geändert:
- </para>
- <table id="migration.110.zend.file.transfer.count.table">
- <title>Geänderte Prüfmeldungen</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Alt</entry>
- <entry>Neu</entry>
- <entry>Wert</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><constant>TOO_MUCH</constant></entry>
- <entry><constant>TOO_MANY</constant></entry>
- <entry>
- Too many files, maximum '%max%' are allowed but '%count%' are given
- </entry>
- </row>
- <row>
- <entry><constant>TOO_LESS</constant></entry>
- <entry><constant>TOO_FEW</constant></entry>
- <entry>
- Too few files, minimum '%min%' are expected but '%count%' are given
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <para>
- Wenn man diese Meldungen im eigenen Code übersetzt dann sollte man die neuen
- Konstanten verwenden. Als Vorteil muss man den originalen String im englischen nicht
- mehr übersetzen um die richtige Schreibweise zu erhalten.
- </para>
- </sect3>
- </sect2>
- <sect2 id="migration.110.zend.translate">
- <title>Zend_Translate</title>
- <sect3 id="migration.110.zend.translate.xliff">
- <title>Xliff Adapter</title>
- <para>
- In der Vergangenheit hat der Xliff Adapter den Source String als Message Id
- verwendet. Laut dem Xliff Standard sollte die trans-unit Id verwendet werden.
- Dieses Verhalten wurde mit Zend Framework 1.10 korrigiert. Jetzt wird
- standardmäßig die trans-unit Id als Message Id verwendet.
- </para>
- <para>
- Aber man kann trotzdem das falsch und alte Verhalten bekommen indem die
- <property>useId</property> Option auf <constant>FALSE</constant> gesetzt wird.
- </para>
- <programlisting language="php"><![CDATA[
- $trans = new Zend_Translate(
- 'xliff', '/path/to/source', $locale, array('useId' => false)
- );
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="migration.110.zend.validate">
- <title>Zend_Validate</title>
- <sect3 id="migration.110.zend.validate.selfwritten">
- <title>Selbst geschriebene Adapter</title>
- <para>
- Wenn in einer selbst geschriebenen Prüfung ein Fehler gesetzt wird um diesen
- zurückzugeben muß die <methodname>_error()</methodname> Methode aufgerufen werden.
- Vor Zend Framework 1.10 konnte man diese Methode ohne einen angegebenen Parameter
- aufrufen. Es wurde dann das erste gefundene Nachrichtentemplate verwendet.
- </para>
- <para>
- Dieses Verhalten ist problematisch wenn man Prüfungen hat die mehr als eine
- Nachricht zurückgeben kann. Auch wenn man eine existierende Prüfung erweitert kann
- man unerwartete Ergebnisse erhalten. Das kann zum Problem führen das der Benutzer
- nicht die Nachricht erhält die man erwartet.
- </para>
- <programlisting language="php"><![CDATA[
- My_Validator extends Zend_Validate_Abstract
- {
- public isValid($value)
- {
- ...
- $this->_error(); // Unerwartete Ergebnisse zwischen verschiedenen OS
- ...
- }
- }
- ]]></programlisting>
- <para>
- Um dieses Problem zu verhindern erlaubt es die <methodname>_error()</methodname>
- Methode nicht mehr ohne einen angegebenen Parameter aufgerufen zu werden.
- </para>
- <programlisting language="php"><![CDATA[
- My_Validator extends Zend_Validate_Abstract
- {
- public isValid($value)
- {
- ...
- $this->_error(self::MY_ERROR);
- // Definierter Fehler, keine unerwarteten Ergebnisse
- ...
- }
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="migration.110.zend.validate.datevalidator">
- <title>Vereinfachungen im Date Prüfer</title>
- <para>
- Vor Zend Framework 1.10 wurden 2 identische Nachrichten im Date Prüfer geworfen.
- Es gab <constant>NOT_YYYY_MM_DD</constant> und <constant>FALSEFORMAT</constant>.
- Ab Zend Framework 1.10 wird nur mehr die <constant>FALSEFORMAT</constant> Meldung
- zurückgegeben wenn das angegebene Datum mit dem gesetzten Format nicht
- übereinstimmt.
- </para>
- </sect3>
- <sect3 id="migration.110.zend.validate.barcodevalidator">
- <title>Fehlerbehebungen im Alpha, Alum und Barcode Prüfer</title>
- <para>
- Vor dem Zend Framework 1.10 waren Nachrichten in den 2 Barcode Adaptern, dem Alpha
- und dem Alnum Prüfer identisch. Das führte zu Problemen bei der Verwendung von
- eigenen Meldungen, Übersetzungen oder mehreren Instanzen dieser Prüfer.
- </para>
- <para>
- Mit Zend Framework 1.10 wurden die Werte dieser Konstanten so geändert das Sie
- eindeutig sind. Wenn man, so wie es im Handbuhc erklärt wird, die Konstanten
- verwendet gibt es keine Änderungen. Aber wenn man den Inhalt der Konstanten im
- eigenen Code verwendet dann muß man diese Ändern. Die folgende Tabelle zeigt die
- geänderten Werte:
- </para>
- <table id="migration.110.zend.validate.barcodevalidator.table">
- <title>Vorhandenen Meldungen der Prüfer</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Prüfer</entry>
- <entry>Konstante</entry>
- <entry>Wert</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><classname>Alnum</classname></entry>
- <entry><constant>STRING_EMPTY</constant></entry>
- <entry>alnumStringEmpty</entry>
- </row>
- <row>
- <entry><classname>Alpha</classname></entry>
- <entry><constant>STRING_EMPTY</constant></entry>
- <entry>alphaStringEmpty</entry>
- </row>
- <row>
- <entry><classname>Barcode_Ean13</classname></entry>
- <entry><constant>INVALID</constant></entry>
- <entry>ean13Invalid</entry>
- </row>
- <row>
- <entry><classname>Barcode_Ean13</classname></entry>
- <entry><constant>INVALID_LENGTH</constant></entry>
- <entry>ean13InvalidLength</entry>
- </row>
- <row>
- <entry><classname>Barcode_UpcA</classname></entry>
- <entry><constant>INVALID_LENGTH</constant></entry>
- <entry>upcaInvalidLength</entry>
- </row>
- <row>
- <entry><classname>Digits</classname></entry>
- <entry><constant>STRING_EMPTY</constant></entry>
- <entry>digitsStringEmpty</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- </sect2>
- </sect1>
|