migration-19.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 19425 -->
  4. <sect1 id="migration.19">
  5. <title>Zend Framework 1.9</title>
  6. <para>
  7. 以前のバージョンから Zend Framework 1.9 またはそれ以降に更新する際は、
  8. 下記の移行上の注意点に注意すべきです。
  9. </para>
  10. <sect2 id="migration.19.zend.file.transfer">
  11. <title>Zend_File_Transfer</title>
  12. <sect3 id="migration.19.zend.file.transfer.mimetype">
  13. <title>MimeType の検証</title>
  14. <para>
  15. セキュリティ上の理由から、
  16. <classname>MimeType</classname>、<classname>ExcludeMimeType</classname>、
  17. <classname>IsCompressed</classname> および <classname>IsImage</classname>
  18. バリデータにおけるデフォルトのフォールバック機能を無効にしました。
  19. つまり、<emphasis>fileInfo</emphasis> 拡張モジュールあるいは
  20. <emphasis>magicMime</emphasis> 拡張モジュールがなければ、
  21. 検証が常に失敗するようになるということです。
  22. </para>
  23. <para>
  24. ユーザ側から渡された <acronym>HTTP</acronym> フィールドを使用して入力を検証する必要がある場合は、
  25. <methodname>enableHeaderCheck()</methodname> メソッドを使用すればこの機能を有効にできます。
  26. </para>
  27. <note>
  28. <title>セキュリティに関するヒント</title>
  29. <para>
  30. ユーザ側から渡された <acronym>HTTP</acronym>
  31. フィールドに依存するのはセキュリティ上のリスクとなることに注意しましょう。
  32. これは簡単に改ざんすることができ、悪意のあるファイルを受け取る可能性があります。
  33. </para>
  34. </note>
  35. <example id="migration.19.zend.file.transfer.example">
  36. <title>HTTP フィールドの使用を許可する</title>
  37. <programlisting language="php"><![CDATA[
  38. // 初期化時に
  39. $valid = new Zend_File_Transfer_Adapter_Http(array('headerCheck' => true);
  40. // あるいは後から
  41. $valid->enableHeaderCheck();
  42. ]]></programlisting>
  43. </example>
  44. </sect3>
  45. </sect2>
  46. <sect2 id="migration.19.zend.filter">
  47. <title>Zend_Filter</title>
  48. <para>
  49. 1.9のリリース以前は、<classname>Zend_Filter</classname>では、
  50. static <methodname>get()</methodname>メソッドを使うことができました。
  51. リリース1.9と同時に、このメソッドは、より描写的な
  52. <methodname>filterStatic()</methodname>に名前を変更されました。
  53. 古い <methodname>get()</methodname> メソッドは非推奨に区分されます。
  54. </para>
  55. </sect2>
  56. <sect2 id="migration.19.zend.http.client">
  57. <title>Zend_Http_Client</title>
  58. <sect3 id="migration.19.zend.http.client.fileuploadsarray">
  59. <title>内部のアップロードされたファイル情報ストレージに変更</title>
  60. <para>
  61. Zend Framework のバージョン 1.9 では、
  62. アップロードされるファイルに関する情報を
  63. <classname>Zend_Http_Client</classname>が内部的に格納し、
  64. <methodname>Zend_Http_Client::setFileUpload()</methodname>メソッドを用いてセットする
  65. 方法で変化がありました。
  66. </para>
  67. <para>
  68. 複数のファイルを同じフォーム名で
  69. ファイルの配列としてアップロードできるように
  70. この変化が取り入れられました。
  71. この問題に関するより多くの情報は、<ulink
  72. url="http://framework.zend.com/issues/browse/ZF-5744">このバグ・レポート</ulink>
  73. で見つけられます。
  74. </para>
  75. <example id="migration.19.zend.http.client.fileuploadsarray.example">
  76. <title>アップロードされたファイル情報の内部ストレージ</title>
  77. <programlisting language="php"><![CDATA[
  78. // ファイル2つを同じフォーム要素名でファイルの配列としてアップロード
  79. $client = new Zend_Http_Client();
  80. $client->setFileUpload('file1.txt',
  81. 'userfile[]',
  82. 'some raw data',
  83. 'text/plain');
  84. $client->setFileUpload('file2.txt',
  85. 'userfile[]',
  86. 'some other data',
  87. 'application/octet-stream');
  88. // Zend Framework の 1.8 以前では、
  89. // protected メンバー $client->files の値はこうです:
  90. // $client->files = array(
  91. // 'userfile[]' => array('file2.txt',
  92. 'application/octet-stream',
  93. 'some other data')
  94. // );
  95. // Zend Framework の 1.9 以降では、$client->files の値はこうです:
  96. // $client->files = array(
  97. // array(
  98. // 'formname' => 'userfile[]',
  99. // 'filename' => 'file1.txt,
  100. // 'ctype' => 'text/plain',
  101. // 'data' => 'some raw data'
  102. // ),
  103. // array(
  104. // 'formname' => 'userfile[]',
  105. // 'filename' => 'file2.txt',
  106. // 'formname' => 'application/octet-stream',
  107. // 'formname' => 'some other data'
  108. // )
  109. // );
  110. ]]></programlisting>
  111. </example>
  112. <para>
  113. ご覧の通り、この変化は1つ以上のファイルで同じフォーム要素名を使えるようにします。
  114. しかし、それは微妙な下位互換性変化を取り入れるので、そのように注意するべきです。
  115. </para>
  116. </sect3>
  117. <sect3 id="migration.19.zend.http.client.getparamsrecursize">
  118. <title>Zend_Http_Client::_getParametersRecursive() の廃止</title>
  119. <para>
  120. バージョン1.9から始まりますが、
  121. protected メソッド <methodname>_getParametersRecursive()</methodname> はもはや
  122. <classname>Zend_Http_Client</classname> に使われず、廃止されます。
  123. それを使うと、E_NOTICE メッセージが<acronym>PHP</acronym>によって発生する原因になります。
  124. </para>
  125. <para>
  126. <classname>Zend_Http_Client</classname>をサブクラスとして、このメソッドを呼ぶなら、
  127. その代わりに <methodname>Zend_Http_Client::_flattenParametersArray()</methodname>
  128. static メソッドを使用することに目を向けるべきです。
  129. </para>
  130. <para>
  131. また、この<classname>_getParametersRecursive</classname>は protected メソッドなので、
  132. この変化は<classname>Zend_Http_Client</classname>をサブクラスとするユーザーに
  133. 影響を及ぼすだけです。
  134. </para>
  135. </sect3>
  136. </sect2>
  137. <sect2 id="migration.19.zend.locale">
  138. <title>Zend_Locale</title>
  139. <sect3 id="migration.19.zend.locale.depreciated">
  140. <title>非推奨となるメソッド</title>
  141. <para>
  142. 特別に用意されていたメソッドのいくつかが非推奨となります。
  143. 既存の挙動と重複しているからです。
  144. 古いメソッドも動作するにはしますが、
  145. 新しいメソッドについて説明する user notice が発生することに注意しましょう。
  146. これらのメソッドは 2.0 で削除されます。
  147. 次の一覧で、新旧のメソッドコールを参照ください。
  148. </para>
  149. <table id="migration.19.zend.locale.depreciated.table-1">
  150. <title>新旧のメソッドコールの一覧</title>
  151. <tgroup cols="2">
  152. <thead>
  153. <row>
  154. <entry>古い方法</entry>
  155. <entry>新しい方法</entry>
  156. </row>
  157. </thead>
  158. <tbody>
  159. <row>
  160. <entry>getLanguageTranslationList($locale)</entry>
  161. <entry>getTranslationList('language', $locale)</entry>
  162. </row>
  163. <row>
  164. <entry>getScriptTranslationList($locale)</entry>
  165. <entry>getTranslationList('script', $locale)</entry>
  166. </row>
  167. <row>
  168. <entry>getCountryTranslationList($locale)</entry>
  169. <entry>getTranslationList('territory', $locale, 2)</entry>
  170. </row>
  171. <row>
  172. <entry>getTerritoryTranslationList($locale)</entry>
  173. <entry>getTranslationList('territory', $locale, 1)</entry>
  174. </row>
  175. <row>
  176. <entry>getLanguageTranslation($value, $locale)</entry>
  177. <entry>getTranslation($value, 'language', $locale)</entry>
  178. </row>
  179. <row>
  180. <entry>getScriptTranslation($value, $locale)</entry>
  181. <entry>getTranslation($value, 'script', $locale)</entry>
  182. </row>
  183. <row>
  184. <entry>getCountryTranslation($value, $locale)</entry>
  185. <entry>getTranslation($value, 'country', $locale)</entry>
  186. </row>
  187. <row>
  188. <entry>getTerritoryTranslation($value, $locale)</entry>
  189. <entry>getTranslation($value, 'territory', $locale)</entry>
  190. </row>
  191. </tbody>
  192. </tgroup>
  193. </table>
  194. </sect3>
  195. </sect2>
  196. <sect2 id="migration.19.zend.view.helper.navigation">
  197. <title>Zend_View_Helper_Navigation</title>
  198. <para>
  199. 1.9のリリースより前は、
  200. メニュー・ヘルパー (<classname>Zend_View_Helper_Navigation_Menu</classname>) は、
  201. サブメニューを正しく生成しませんでした。
  202. <code>onlyActiveBranch</code> が <constant>TRUE</constant> で、
  203. オプションの <code>renderParents</code> が <constant>FALSE</constant> のとき、
  204. もし、最も深いアクティブなページが <code>minDepth</code> オプションより低い階層にあると、
  205. 何もレンダリングされないでしょう。
  206. </para>
  207. <para>
  208. より簡単に言うと、もし <code>minDepth</code> が <code>1</code> に設定され、
  209. アクティブなページが最初のレベルのページの一つなら、
  210. 以下の例が示すように、何もレンダリングされないでしょう。
  211. </para>
  212. <para>
  213. 下記のコンテナのセットアップを考えて見ましょう。
  214. </para>
  215. <programlisting language="php"><![CDATA[
  216. <?php
  217. $container = new Zend_Navigation(array(
  218. array(
  219. 'label' => 'Home',
  220. 'uri' => '#'
  221. ),
  222. array(
  223. 'label' => 'Products',
  224. 'uri' => '#',
  225. 'active' => true,
  226. 'pages' => array(
  227. array(
  228. 'label' => 'Server',
  229. 'uri' => '#'
  230. ),
  231. array(
  232. 'label' => 'Studio',
  233. 'uri' => '#'
  234. )
  235. )
  236. ),
  237. array(
  238. 'label' => 'Solutions',
  239. 'uri' => '#'
  240. )
  241. ));
  242. ]]></programlisting>
  243. <para>
  244. 下記のコードがビュースクリプトで使用されます。
  245. </para>
  246. <programlisting language="php"><![CDATA[
  247. <?php echo $this->navigation()->menu()->renderMenu($container, array(
  248. 'minDepth' => 1,
  249. 'onlyActiveBranch' => true,
  250. 'renderParents' => false
  251. )); ?>
  252. ]]></programlisting>
  253. <para>
  254. リリース1.9より前は、上記のコードスニペットは、何も出力しません。
  255. </para>
  256. <para>
  257. リリース1.9以降では、ページの子供がある限り、
  258. <classname>Zend_View_Helper_Navigation_Menu</classname> の <methodname>_renderDeepestMenu()</methodname>
  259. メソッドは <code>minDepth</code> の1階層下のアクティブページを受け取ります。
  260. </para>
  261. <para>
  262. 今では、同じコードスニペットで下記を出力します。
  263. </para>
  264. <programlisting language="html"><![CDATA[
  265. <ul class="navigation">
  266. <li>
  267. <a href="#">Server</a>
  268. </li>
  269. <li>
  270. <a href="#">Studio</a>
  271. </li>
  272. </ul>
  273. ]]></programlisting>
  274. </sect2>
  275. </sect1>
  276. <!--
  277. vim:se ts=4 sw=4 et:
  278. -->