[MANUAL] German:
[zend.git] / documentation / manual / de / ref / migration-19.xml
blob0b00e8d3a0543ae5953d0ced4ea0baaea6a2ff14
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21825 -->
3 <!-- Reviewed: no -->
4 <sect1 id="migration.19">
5     <title>Zend Framework 1.9</title>
7     <para>
8         Wenn man von einem Zend Framework Release vor 1.9.0 zu einem beliebigen 1.9 Release
9         hochrüstet sollte man die folgenden Migrations Hinweise beachten.
10     </para>
12     <sect2 id="migration.19.zend.file.transfer">
13         <title>Zend_File_Transfer</title>
15         <sect3 id="migration.19.zend.file.transfer.mimetype">
16             <title>MimeType Prüfung</title>
18             <para>
19                 Aus Sicherheitsgründen haben wir den standardmäßigen Fallback Mechanismus der
20                 <classname>MimeType</classname>, <classname>ExcludeMimeType</classname>,
21                 <classname>IsCompressed</classname> und <classname>IsImage</classname> Prüfungen
22                 ausgeschaltet. Das bedeutet, wenn die <emphasis>fileInfo</emphasis> oder
23                 <emphasis>magicMime</emphasis> Erweiterungen nicht gefunden werden können, dann
24                 wird die Prüfung immer fehlschlagen.
25             </para>
27             <para>
28                 Wenn es notwendig ist das man für die Prüfung die <acronym>HTTP</acronym> Felder
29                 verwendet welche vom Benutzer geschickt werden, dann kann man dieses Feature
30                 einschalten indem die <methodname>enableHeaderCheck()</methodname> Methode
31                 verwendet wird.
32             </para>
34             <note>
35                 <title>Sicherheits Hinweis</title>
37                 <para>
38                     Man sollte beachten, das wenn man sich auf die <acronym>HTTP</acronym> Felder
39                     verlässt, die vom Benutzer geschickt werden, das ein Sicherheits Risiko ist.
40                     Diese können einfach geändert werden und könnten es einem Benutzer erlauben eine
41                     schädliche Datei zu schicken.
42                 </para>
43             </note>
45             <example id="migration.19.zend.file.transfer.example">
46                 <title>Die Verwendung der HTTP Felder erlauben</title>
48                 <programlisting language="php"><![CDATA[
49 // Bei der Initiierung
50 $valid = new Zend_File_Transfer_Adapter_Http(array('headerCheck' => true);
52 // oder im Nachhinein
53 $valid->enableHeaderCheck();
54 ]]></programlisting>
55             </example>
56         </sect3>
57     </sect2>
59     <sect2 id="migration.19.zend.filter">
60         <title>Zend_Filter</title>
62         <para>
63             Vor dem Release 1.9 erlaubte <classname>Zend_Filter</classname> die Verwendung der
64             statischen Methode <methodname>get()</methodname>. Ab dem Release 1.9 wurde diese
65             Methode zu <methodname>filterStatic()</methodname> umbenannt um besser zu beschreiben
66             was Sie macht. Die alte <methodname>get()</methodname> Methode wurde als deprecated
67             markiert.
68         </para>
69     </sect2>
71     <sect2 id="migration.19.zend.http.client">
72         <title>Zend_Http_Client</title>
74         <sect3 id="migration.19.zend.http.client.fileuploadsarray">
75             <title>
76                 Änderungen in der internen Speicherung der Information von hochgeladenen Dateien
77             </title>
79             <para>
80                 In Version 1.9 vom Zend Framework gibt es eine Ändernug wie
81                 <classname>Zend_Http_Client</classname> Informationen über hochgeladenen Dateien
82                 intern speichert, bei denen die
83                 <methodname>Zend_Http_Client::setFileUpload()</methodname> Methode verwendet wird.
84             </para>
86             <para>
87                 Diese Änderung wurde durchgeführt um es zu erlauben mehrere Dateien mit dem
88                 gleichen Formularnamen, als Array von Dateien, hochzuladen. Weitere Informationen
89                 über dieses Problem können in <ulink
90                     url="http://framework.zend.com/issues/browse/ZF-5744">diesem
91                     Fehlerreport</ulink> gefunden werden.
92             </para>
94             <example id="migration.19.zend.http.client.fileuploadsarray.example">
95                 <title>Interne Speicherung der Informationen von hochgeladenen Dateien</title>
97                 <programlisting language="php"><![CDATA[
98 // Zwei Dateien mit dem gleichen Namen des Formularelements als Array hochladen
99 $client = new Zend_Http_Client();
100 $client->setFileUpload('file1.txt',
101                        'userfile[]',
102                        'some raw data',
103                        'text/plain');
104 $client->setFileUpload('file2.txt',
105                        'userfile[]',
106                        'some other data',
107                        'application/octet-stream');
109 // In Zend Framework 1.8 oder älter, ist der Wert der geschützten
110 // Variable $client->files:
111 // $client->files = array(
112 //     'userfile[]' => array('file2.txt',
113                              'application/octet-stream',
114                              'some other data')
115 // );
117 // In Zend Framework 1.9 oder neuer, ist der Wert von $client->files:
118 // $client->files = array(
119 //     array(
120 //         'formname' => 'userfile[]',
121 //         'filename' => 'file1.txt,
122 //         'ctype'    => 'text/plain',
123 //         'data'     => 'some raw data'
124 //     ),
125 //     array(
126 //         'formname' => 'userfile[]',
127 //         'filename' => 'file2.txt',
128 //         'formname' => 'application/octet-stream',
129 //         'formname' => 'some other data'
130 //     )
131 // );
132 ]]></programlisting>
133             </example>
135             <para>
136                 Wie man sieht gestattet diese Änderung die Verwendung des gleichen Namens für das
137                 Formularelement mit mehr als einer Datei - trotzdem führt dies zu einer subtilen
138                 Änderung der Rückwärtskompatibilität und sollte erwähnt werden.
139             </para>
140         </sect3>
142         <sect3 id="migration.19.zend.http.client.getparamsrecursize">
143             <title>
144                 Zend_Http_Client::_getParametersRecursive() sollte nicht mehr eingesetzt werden
145             </title>
147             <para>
148                 Beginnend mit Version 1.9, wird die geschützte Methode
149                 <methodname>_getParametersRecursive()</methodname> nicht mehr von
150                 <classname>Zend_Http_Client</classname> verwendet und ist abgelehnt (deprecated).
151                 Ihre Verwendung führt zu einer <constant>E_NOTICE</constant> Nachricht die von
152                 <acronym>PHP</acronym> kommt.
153             </para>
155             <para>
156                 Wenn man <classname>Zend_Http_Client</classname> erweitert und diese Methode
157                 aufrufr, sollte man sehen das man stattdessen die statische Methode
158                 <methodname>Zend_Http_Client::_flattenParametersArray()</methodname> verwendet.
159             </para>
161             <para>
162                 Nochmals, da <methodname>_getParametersRecursive()</methodname> eine geschützte
163                 Methode ist, sind nur Benutzer betroffen die <classname>Zend_Http_Client</classname>
164                 erweitert haben.
165             </para>
166         </sect3>
167     </sect2>
169     <sect2 id="migration.19.zend.locale">
170         <title>Zend_Locale</title>
172         <sect3 id="migration.19.zend.locale.deprecated">
173             <title>Abgelaufene Methoden</title>
175             <para>
176                 Einige spezialisiertere Übersetzungsmethoden stehen nicht mehr zur Verfügung weil
177                 Sie bestehende Verhaltensweisen duplizieren. Beachten Sie das die alten Methoden
178                 weiterhin funktionieren, aber eine Benutzer Notiz geworfen wird, die den neuen
179                 Aufruf beschreibt. Diese Methoden werden mit 2.0 entfernt. Die folgende Liste zeigt
180                 die alten und neuen Methodenaufrufe.
181             </para>
183             <table id="migration.19.zend.locale.deprecated.table-1">
184                 <title>List der Methodenaufrufe</title>
186                 <tgroup cols="2">
187                     <thead>
188                         <row>
189                             <entry>Alter Aufruf</entry>
190                             <entry>Neuer Aufruf</entry>
191                         </row>
192                     </thead>
194                     <tbody>
195                         <row>
196                             <entry>
197                                 <methodname>getLanguageTranslationList($locale)</methodname>
198                             </entry>
200                             <entry>
201                                 <methodname>getTranslationList('language', $locale)</methodname>
202                             </entry>
203                         </row>
205                         <row>
206                             <entry>
207                                 <methodname>getScriptTranslationList($locale)</methodname>
208                             </entry>
210                             <entry>
211                                 <methodname>getTranslationList('script', $locale)</methodname>
212                             </entry>
213                         </row>
215                         <row>
216                             <entry>
217                                 <methodname>getCountryTranslationList($locale)</methodname>
218                             </entry>
220                             <entry>
221                                 <methodname>getTranslationList('territory', $locale, 2)</methodname>
222                             </entry>
223                         </row>
225                         <row>
226                             <entry>
227                                 <methodname>getTerritoryTranslationList($locale)</methodname>
228                             </entry>
230                             <entry>
231                                 <methodname>getTranslationList('territory', $locale, 1)</methodname>
232                             </entry>
233                         </row>
235                         <row>
236                             <entry>
237                                 <methodname>getLanguageTranslation($value, $locale)</methodname>
238                             </entry>
240                             <entry>
241                                 <methodname>getTranslation($value, 'language', $locale)</methodname>
242                             </entry>
243                         </row>
245                         <row>
246                             <entry>
247                                 <methodname>getScriptTranslation($value, $locale)</methodname>
248                             </entry>
250                             <entry>
251                                 <methodname>getTranslation($value, 'script', $locale)</methodname>
252                             </entry>
253                         </row>
255                         <row>
256                             <entry>
257                                 <methodname>getCountryTranslation($value, $locale)</methodname>
258                             </entry>
260                             <entry>
261                                 <methodname>getTranslation($value, 'country', $locale)</methodname>
262                             </entry>
263                         </row>
265                         <row>
266                             <entry>
267                                 <methodname>getTerritoryTranslation($value, $locale)</methodname>
268                             </entry>
270                             <entry>
271                                 <methodname>getTranslation($value, 'territory',
272                                     $locale)</methodname>
273                             </entry>
274                         </row>
275                     </tbody>
276                 </tgroup>
277             </table>
278         </sect3>
279     </sect2>
281     <sect2 id="migration.19.zend.view.helper.navigation">
282         <title>Zend_View_Helper_Navigation</title>
284         <para>
285             Vor dem Release 1.9 hat der Menü Helfer
286             (<classname>Zend_View_Helper_Navigation_Menu</classname>) Untermenüs nicht richtig
287             dargestellt. Wenn <property>onlyActiveBranch</property> <constant>TRUE</constant> war
288             und die Option <property>renderParents</property> <constant>FALSE</constant> wurde
289             nichts dargestellt wenn die tiefste aktive Seite auf einer geringeren Tiele als die
290             <property>minDepth</property> Option war.
291         </para>
293         <para>
294             In einfacheren Worten; Wenn <property>minDepth</property> auf '1' gesetzt war und
295             die aktive Seite eine der Seiten am Anfangs-Level, wurde nichts dargestellt wie das
296             folgende Beispiel zeigt.
297         </para>
299         <para>
300             Das folgende Container Setup wird angenommen:
301         </para>
303         <programlisting language="php"><![CDATA[
304 <?php
305 $container = new Zend_Navigation(array(
306     array(
307         'label' => 'Home',
308         'uri'   => '#'
309     ),
310     array(
311         'label'  => 'Products',
312         'uri'    => '#',
313         'active' => true,
314         'pages'  => array(
315             array(
316                 'label' => 'Server',
317                 'uri'   => '#'
318             ),
319             array(
320                 'label' => 'Studio',
321                 'uri'   => '#'
322             )
323         )
324     ),
325     array(
326         'label' => 'Solutions',
327         'uri'   => '#'
328     )
330 ]]></programlisting>
332         <para>
333             Der folgende Code wird in einem View Script verwendet:
334         </para>
336         <programlisting language="php"><![CDATA[
337 <?php echo $this->navigation()->menu()->renderMenu($container, array(
338     'minDepth'         => 1,
339     'onlyActiveBranch' => true,
340     'renderParents'    => false
341 )); ?>
342 ]]></programlisting>
344         <para>
345             Vor dem Release 1.9 würde der obige Codeabschnitt nichts ausgeben.
346         </para>
348         <para>
349             Seit dem Release 1.9 akzeptiert die <methodname>_renderDeepestMenu()</methodname>
350             Methode in <classname>Zend_View_Helper_Navigation_Menu</classname> aktive Seiten die ein
351             Level unter <property>minDepth</property> sind, solange diese Seite Kinder hat.
352         </para>
354         <para>
355             Der gleiche Codeabschnitt zeigt jetzt die folgende Ausgabe:
356         </para>
358         <programlisting language="html"><![CDATA[
359 <ul class="navigation">
360     <li>
361         <a href="#">Server</a>
362     </li>
363     <li>
364         <a href="#">Studio</a>
365     </li>
366 </ul>
367 ]]></programlisting>
368     </sect2>
370     <sect2 id="migration.19.security">
371         <title>Sicherheitsfixes ab 1.9.7</title>
373         <para>
374             Zusätzlich können Benutzer der Serie 1.9 von anderen Änderungen beginnend in Version
375             1.9.7 betroffen sein. Das sind alles Sicherheitsbehebungen welche auch potentiell
376             Probleme mit Rückwärtskompatibilität haben können.
377         </para>
379         <sect3 id="migration.19.security.zend.dojo.editor">
380             <title>Zend_Dojo_View_Helper_Editor</title>
382             <para>
383                 Eine kleine Änderung wurde in der Serie 1.9 gemacht um die Standardverwendung des
384                 dijit Editors zu modifizieren um <acronym>div</acronym> Tags statt einem
385                 <acronym>textarea</acronym> Tag zu verwenden; die letztere Verwendung bringt <ulink
386                     url="http://api.dojotoolkit.org/jsdoc/HEAD/dijit._editor.RichText">Sicherheits
387                     Probleme</ulink> mit sich, und die Verwendung von <acronym>div</acronym> Tags
388                 wird vom Dojo Projekt empfohlen.
389             </para>
391             <para>
392                 Um trotzdem eine erfolgreiche Degration zu erlauben, wurde dem View Helper eine neue
393                 Option <varname>degrade</varname> hinzugefügt; diese erlaubt es Entwicklern statt
394                 dessen optional ein <acronym>textarea</acronym> zu verwenden. Trotzdem öffnet dies
395                 Anwendungen die damit entwickelt wurden <acronym>XSS</acronym> Vektoren. In 1.9.7
396                 wurde diese Option entfernt. Die erfolgreiche Degration wird trotzdem, über das
397                 <acronym>noscript</acronym> Tag unterstützt welches eine <acronym>textarea</acronym>
398                 enthält. Diese Lösung adressiert Sicherheitsbedenken.
399             </para>
401             <para>
402                 Die Folgerung ist, das wenn man das <varname>degrade</varname> Flag verwendet,
403                 dieses ab diesem Zeitpunkt einfach ignoriert wird.
404             </para>
405         </sect3>
407         <sect3 id="migration.19.security.zend.filter.html-entities">
408             <title>Zend_Filter_HtmlEntities</title>
410             <para>
411                 Um zu einem höheren Sicherheitsstandard für die Zeichenkodierung zu kommen, ist der
412                 Standardwert von <classname>Zend_Filter_HtmlEntities</classname> jetzt
413                 <acronym>UTF-8</acronym> statt <acronym>ISO-8859-1</acronym>.
414             </para>
416             <para>
417                 Zusätzlich, weil der aktuelle Mechanismus mit Zeichenkodierung handelt und nicht mit
418                 Zeichensets, wurden zwei Methoden hinzugefügt.
419                 <methodname>setEncoding()</methodname> und <methodname>getEncoding()</methodname>.
420                 Die vorhergehenden Methoden <methodname>setCharSet()</methodname> und
421                 <methodname>setCharSet()</methodname> sind jetzt deprecated und verweisen auf die
422                 neuen Methoden. Letztendlich, statt die geschützten Mitglieder in der
423                 <methodname>filter()</methodname> Methode direkt zu verwenden, werden Sie durch Ihre
424                 expliziten Zugriffsmethoden empfangen. Wenn man den Filter in der Vergangenheit
425                 erweitert hat, sollte man seinen Code und seine Unittests prüfen um sicherzustellen
426                 das weiterhin alles funktioniert.
427             </para>
428         </sect3>
430         <sect3 id="migration.19.security.zend.filter.strip-tags">
431             <title>Zend_Filter_StripTags</title>
433             <para>
434                 <classname>Zend_Filter_StripTags</classname> enthielt in voehergehenden Versionen
435                 ein <varname>commentsAllowed</varname> Flag, welches es erlaubt hat
436                 <acronym>HTML</acronym> Kommentare in von dieser Klasse gefiltertem
437                 <acronym>HTML</acronym> Text als erlaubt zu markieren. Aber das öffnet den Weg für
438                 <acronym>XSS</acronym> Attacken, speziell im Internet Explorer (der es erlaubt
439                 konditionelle Funktionalität über <acronym>HTML</acronym> Kommentare zu
440                 spezifizieren). Beginnend mit Version 1.9.7 (und retour mit den Versionen 1.8.5 und
441                 1.7.9), hat das <varname>commentsAllowed</varname> Flag keine Bedeutung meht, und
442                 alle <acronym>HTML</acronym> Kommentare, inklusive denen die andere
443                 <acronym>HTML</acronym> Tags oder untergeordnete Kommentare enthalten, werden von
444                 der endgültigen Aufgabe des Filters entfernt.
445             </para>
446         </sect3>
447     </sect2>
448 </sect1>