Introduction to Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 96.1% Update 2010-11-28 - Revision 23448 - Version ZF 1.11.x

    Appendix B. Zend Framework Migration Notes

    Table of Contents

    B.1. Zend Framework 1.10
    B.1.1. Zend_Controller_Front
    B.1.2. Migrating from 1.9.6 to 1.10 or later
    B.1.3. Zend_Filter_HtmlEntities
    B.1.4. Zend_Filter_StripTags
    B.1.5. Zend_File_Transfer
    B.1.5.1. Sicherheitsänderung
    B.1.5.2. Count Prüfung
    B.1.6. Zend_Translate
    B.1.6.1. Xliff Adapter
    B.1.7. Zend_Validate
    B.1.7.1. Selbst geschriebene Adapter
    B.1.7.2. Vereinfachungen im Date Prüfer
    B.1.7.3. Fehlerbehebungen im Alpha, Alum und Barcode Prüfer
    B.2. Zend Framework 1.9
    B.2.1. Zend_File_Transfer
    B.2.1.1. MimeType Prüfung
    B.2.2. Zend_Filter
    B.2.3. Zend_Http_Client
    B.2.3.1. Änderungen in der internen Speicherung der Information von hochgeladenen Dateien
    B.2.3.2. Zend_Http_Client::_getParametersRecursive() sollte nicht mehr eingesetzt werden
    B.2.4. Zend_Locale
    B.2.4.1. Abgelaufene Methoden
    B.2.5. Zend_View_Helper_Navigation
    B.2.6. Sicherheitsfixes ab 1.9.7
    B.2.6.1. Zend_Dojo_View_Helper_Editor
    B.2.6.2. Zend_Filter_HtmlEntities
    B.2.6.3. Zend_Filter_StripTags
    B.3. Zend Framework 1.8
    B.3.1. Zend_Controller
    B.3.1.1. Änderungen der Standard Route
    B.3.2. Zend_Locale
    B.3.2.1. Standard Caching
    B.4. Zend Framework 1.7
    B.4.1. Zend_Controller
    B.4.1.1. Änderungen im Dispatcher Interface
    B.4.2. Zend_File_Transfer
    B.4.2.1. Änderungen bei der Verwendung von Filtern und Prüfungen
    B.4.2.1.1. Filter: Rename
    B.4.2.1.2. Prüfung: Count
    B.4.2.1.3. Prüfung: Extension
    B.4.2.1.4. Prüfung: FilesSize
    B.4.2.1.5. Prüfung: Hash
    B.4.2.1.6. Prüfung: ImageSize
    B.4.2.1.7. Prüfung: Size
    B.4.3. Zend_Locale
    B.4.3.1. Änderungen bei der Verwendung von isLocale()
    B.4.3.2. Änderungen bei der Verwendung von getDefault()
    B.4.4. Zend_Translate
    B.4.4.1. Setzen von Sprachen
    B.4.5. Zend_View
    B.4.5.1. Ausschalten des LFI Schutzes für die render() Methode
    B.5. Zend Framework 1.6
    B.5.1. Zend_Controller
    B.5.1.1. Änderungen im Dispatcher Interface
    B.5.2. Zend_File_Transfer
    B.5.2.1. Änderungen bei der Verwendung von Prüfungen
    B.6. Zend Framework 1.5
    B.6.1. Zend_Controller
    B.7. Zend Framework 1.0
    B.7.1. Zend_Controller
    B.7.2. Zend_Currency
    B.8. Zend Framework 0.9
    B.8.1. Zend_Controller
    B.9. Zend Framework 0.8
    B.9.1. Zend_Controller
    B.10. Zend Framework 0.6
    B.10.1. Zend_Controller

    B.1. Zend Framework 1.10

    Wenn man von einem älteren Release auf Zend Framework 1.10 oder höher hochrüstet sollte man die folgenden Migrations Hinweise beachten.

    B.1.1. Zend_Controller_Front

    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 Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE auf einen spezifischen Fehler testen:

    /**
     * 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:
         
    // ...

    B.1.2. Migrating from 1.9.6 to 1.10 or later

    Mit der Einführung von Zend Framework 1.10 wurde die Behandlung für das Empfangen von Autoren und Entwicklern in Zend_Feed_Reader 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.

    Die Änderung bedeutet das Methoden wie getAuthors() und getContributors 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 ArrayObject die Zend_Feed_Reader_Collection_Author 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.

    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.

    Die einfachste Methode der Simulation des originalen Verhaltens dieser Methoden ist die Verwendung von Zend_Feed_Reader_Collection_Author's getValues() 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.

    /**
     * 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();

    B.1.3. Zend_Filter_HtmlEntities

    Um zu einem höheren Sicherheitsstandard für die Zeichenkodierung zu kommen, ist der Standardwert von Zend_Filter_HtmlEntities jetzt UTF-8 statt ISO-8859-1.

    Zusätzlich, weil der aktuelle Mechanismus mit Zeichenkodierung handelt und nicht mit Zeichensets, wurden zwei Methoden hinzugefügt. setEncoding() und getEncoding(). Die vorhergehenden Methoden setCharSet() und setCharSet() sind jetzt deprecated und verweisen auf die neuen Methoden. Letztendlich, statt die geschützten Mitglieder in der filter() 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.

    B.1.4. Zend_Filter_StripTags

    Zend_Filter_StripTags enthielt in voehergehenden Versionen ein commentsAllowed Flag, welches es erlaubt hat HTML Kommentare in von dieser Klasse gefiltertem HTML Text als erlaubt zu markieren. Aber das öffnet den Weg für XSS Attacken, speziell im Internet Explorer (der es erlaubt konditionelle Funktionalität über HTML Kommentare zu spezifizieren). Beginnend mit Version 1.9.7 (und retour mit den Versionen 1.8.5 und 1.7.9), hat das commentsAllowed Flag keine Bedeutung meht, und alle HTML Kommentare, inklusive denen die andere HTML Tags oder untergeordnete Kommentare enthalten, werden von der endgültigen Aufgabe des Filters entfernt.

    B.1.5. Zend_File_Transfer

    B.1.5.1. Sicherheitsänderung

    Aus Gründen der Sicherheit speichert Zend_File_Transfer 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.

    Zusätzlich werden die originalen Werte in $_FILES bei der Instanzierung mit den echten Werten überschrieben. Das macht auch $_FILES sicher.

    Wenn man die originalen Werte benötigt, kann man diese entweder vor der Instanzierung von Zend_File_Transfer speichern, oder bei der Instanzierung die Option disableInfos verwenden. Es ist zu beachten das diese Option sinnlos ist wenn Sie nach der Instanzierung verwendet wird.

    B.1.5.2. Count Prüfung

    Vor dem Release 1.10 hat die MimeType Prüfung eine falsche Benennung verwendet. Aus Gründen der Konsistenz wurden die folgenden Konstanten geändert:

    Table B.1. Geänderte Prüfmeldungen

    Alt Neu Wert  
    TOO_MUCH TOO_MANY Too many files, maximum '%max%' are allowed but '%count%' are given  
    TOO_LESS TOO_FEW Too few files, minimum '%min%' are expected but '%count%' are given  

    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.

    B.1.6. Zend_Translate

    B.1.6.1. Xliff Adapter

    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.

    Aber man kann trotzdem das falsch und alte Verhalten bekommen indem die useId Option auf FALSE gesetzt wird.

    $trans = new Zend_Translate(
        
    'xliff''/path/to/source'$locale, array('useId' => false)
    );

    B.1.7. Zend_Validate

    B.1.7.1. Selbst geschriebene Adapter

    Wenn in einer selbst geschriebenen Prüfung ein Fehler gesetzt wird um diesen zurückzugeben muß die _error() 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.

    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.

    My_Validator extends Zend_Validate_Abstract
    {
        public 
    isValid($value)
        {
            ...
            
    $this->_error(); // Unerwartete Ergebnisse zwischen verschiedenen OS
            
    ...
        }
    }

    Um dieses Problem zu verhindern erlaubt es die _error() Methode nicht mehr ohne einen angegebenen Parameter aufgerufen zu werden.

    My_Validator extends Zend_Validate_Abstract
    {
        public 
    isValid($value)
        {
            ...
            
    $this->_error(self::MY_ERROR);
            
    // Definierter Fehler, keine unerwarteten Ergebnisse
            
    ...
        }
    }

    B.1.7.2. Vereinfachungen im Date Prüfer

    Vor Zend Framework 1.10 wurden 2 identische Nachrichten im Date Prüfer geworfen. Es gab NOT_YYYY_MM_DD und FALSEFORMAT. Ab Zend Framework 1.10 wird nur mehr die FALSEFORMAT Meldung zurückgegeben wenn das angegebene Datum mit dem gesetzten Format nicht übereinstimmt.

    B.1.7.3. Fehlerbehebungen im Alpha, Alum und Barcode Prüfer

    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.

    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:

    Table B.2. Vorhandenen Meldungen der Prüfer

    Prüfer Konstante Wert
    Alnum STRING_EMPTY alnumStringEmpty
    Alpha STRING_EMPTY alphaStringEmpty
    Barcode_Ean13 INVALID ean13Invalid
    Barcode_Ean13 INVALID_LENGTH ean13InvalidLength
    Barcode_UpcA INVALID_LENGTH upcaInvalidLength
    Digits STRING_EMPTY digitsStringEmpty

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...