Zend_Uri.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="zend.uri.chapter">
  4. <title>Zend_Uri</title>
  5. <sect2 id="zend.uri.overview">
  6. <title>Обзор</title>
  7. <para>
  8. <classname>Zend_Uri</classname> является компонентой, которая призвана облегчить
  9. работу с URI (<ulink url="http://www.w3.org/Addressing/">Uniform Resource
  10. Identifiers</ulink>) и их валидацию. <classname>Zend_Uri</classname> был создан для
  11. обслуживания других компонент, таких, как <classname>Zend_Http_Client</classname>,
  12. но полезен и как отдельная утилита.
  13. </para>
  14. <para>
  15. URI всегда начинаются со схемы, после которой следует двоеточие. Структура
  16. для разных схем может сильно отличаться. Класс <classname>Zend_Uri</classname>
  17. предоставляет фабрику (паттерн factory), которая возвращает его подклассы,
  18. специализирующиеся в различных схемах. Подклассы называются
  19. <classname>Zend_Uri_&lt;scheme&gt;</classname>, где <code>&lt;scheme&gt;</code> -
  20. схема в нижнем регистре, с прописной первой буквой. Исключением из этого
  21. правила является HTTPS, который обрабатывается подклассом
  22. <classname>Zend_Uri_Http</classname>.
  23. </para>
  24. </sect2>
  25. <sect2 id="zend.uri.creation">
  26. <title>Создание нового URI</title>
  27. <para>
  28. <classname>Zend_Uri</classname> будет строить с нуля новый URI, если
  29. <code>Zend_Uri::factory()</code> была передана только схема.
  30. </para>
  31. <example id="zend.uri.creation.example-1">
  32. <title>Создание нового URI с Zend_Uri::factory()</title>
  33. <programlisting language="php"><![CDATA[
  34. // Для того, чтобы создать с нуля новый URI, передайте только схему.
  35. $uri = Zend_Uri::factory('http');
  36. // $uri является экземпляром Zend_Uri_Http
  37. ]]></programlisting>
  38. </example>
  39. <para>
  40. Для того, чтобы создать с нуля новый URI, передайте
  41. <code>Zend_Uri::factory()</code> только схему. <footnote><para>На момент
  42. написания этой документации Zend_Uri поддерживает только схемы HTTP и
  43. HTTPS.</para></footnote>. При передаче не поддерживаемой схемы
  44. генерируется исключение <classname>Zend_Uri_Exception</classname>.
  45. </para>
  46. <para>
  47. Если переданные схема или URI поддерживаются, то
  48. <code>Zend_Uri::factory()</code> вернет свой подкласс, который
  49. специализируется на данной схеме.
  50. </para>
  51. </sect2>
  52. <sect2 id="zend.uri.manipulation">
  53. <title>Работа с существующим URI</title>
  54. <para>
  55. Для того, чтобы работать с существующим URI, передайте его весь целиком
  56. <code>Zend_Uri::factory()</code>.
  57. </para>
  58. <example id="zend.uri.manipulation.example-1">
  59. <title>Работа с существующим URI через Zend_Uri::factory()</title>
  60. <programlisting language="php"><![CDATA[
  61. // Чтобы работать с существующим URI, передайте его как параметр
  62. $uri = Zend_Uri::factory('http://www.zend.com');
  63. // $uri является экземпляром Zend_Uri_Http
  64. ]]></programlisting>
  65. </example>
  66. <para>
  67. URI будет распарсен и проверен на валидность. Если он оказался невалидным,
  68. то сразу же будет сгенерировано исключение
  69. <classname>Zend_Uri_Exception</classname>. Иначе <code>Zend_Uri::factory()</code>
  70. вернет свой подкласс, который специализируется на данной схеме.
  71. </para>
  72. </sect2>
  73. <sect2 id="zend.uri.validation">
  74. <title>Проверка URI</title>
  75. <para>
  76. Функция <code>Zend_Uri::check()</code> может использоваться в том случае,
  77. когда нужна только проверка существующего URI.
  78. </para>
  79. <example id="zend.uri.validation.example-1">
  80. <title>Проверка URI с помощью Zend_Uri::check()</title>
  81. <programlisting language="php"><![CDATA[
  82. // Проверка, является ли данный URI синтаксически корректным
  83. $valid = Zend_Uri::check('http://uri.in.question');
  84. // $valid равен TRUE при валидном URI, иначе FALSE
  85. ]]></programlisting>
  86. </example>
  87. <para>
  88. <code>Zend_Uri::check()</code> возвращает булево значение, использование
  89. этой функции более удобно, чем вызов <code>Zend_Uri::factory()</code> и
  90. отлов исключения.
  91. </para>
  92. <sect3 id="zend.uri.validation.allowunwise">
  93. <title>Разрешение использования "неумных" символов в URI</title>
  94. <para>
  95. По умолчанию <classname>Zend_Uri</classname> не будет принимать
  96. следующие символы, которые в спецификации определены как "неумные"
  97. (unwise) и невалидные: <code>"{", "}", "|", "\", "^", "`"</code>.
  98. Тем не менее, многие реализации принимают эти символы как валидные.
  99. </para>
  100. <para>
  101. Можно заставить <classname>Zend_Uri</classname> принимать эти
  102. символы путем установки 'allow_unwise' в TRUE, используя метод
  103. <code>Zend_Uri::setConfig()</code>:
  104. </para>
  105. <example id="zend.uri.validation.allowunwise.example-1">
  106. <title>Разрешение использования спецсимволов в URI</title>
  107. <programlisting language="php"><![CDATA[
  108. // Содержит символ '|'
  109. // Обычно такой вызов будет возвращать 'false':
  110. $valid = Zend_Uri::check('http://example.com/?q=this|that');
  111. // Тем не менее, вы можете разрешить "неумные" символы
  112. Zend_Uri::setConfig(array('allow_unwise' => true));
  113. // будет возвращать 'true'
  114. $valid = Zend_Uri::check('http://example.com/?q=this|that');
  115. // Установка 'allow_unwise' обратно в FALSE
  116. Zend_Uri::setConfig(array('allow_unwise' => false));
  117. ]]></programlisting>
  118. </example>
  119. <note>
  120. <para>
  121. <code>Zend_Uri::setConfig()</code> глобально устанавливает опции
  122. конфигурации. Рекомендуется сбрасывать опцию
  123. 'allow_unwise' в 'false', как показано в примере выше,
  124. если только вы не хотите разрешить использование "неумных"
  125. символов на все время во всем приложении.
  126. </para>
  127. </note>
  128. </sect3>
  129. </sect2>
  130. <sect2 id="zend.uri.instance-methods">
  131. <title>Общие методы экземпляров</title>
  132. <para>
  133. Каждый экземпляр подкласса <classname>Zend_Uri</classname> (например,
  134. <classname>Zend_Uri_Http</classname>) имеет несколько методов,
  135. полезных для работы с любыми видами URI.
  136. </para>
  137. <sect3 id="zend.uri.instance-methods.getscheme">
  138. <title>Получение схемы URI</title>
  139. <para>
  140. Схема URI – часть URI, завершающаяся двоеточием. Например, схемой в
  141. <code>http://www.zend.com</code> является <code>http</code>.
  142. </para>
  143. <example id="zend.uri.instance-methods.getscheme.example-1">
  144. <title>Получение схемы из объекта Zend_Uri_*</title>
  145. <programlisting language="php"><![CDATA[
  146. $uri = Zend_Uri::factory('http://www.zend.com');
  147. $scheme = $uri->getScheme(); // "http"
  148. ]]></programlisting>
  149. </example>
  150. <para>
  151. Метод экземпляра <code>getScheme()</code> возвращает схему из URI.
  152. </para>
  153. </sect3>
  154. <sect3 id="zend.uri.instance-methods.geturi">
  155. <title>Получение всего URI</title>
  156. <example id="zend.uri.instance-methods.geturi.example-1">
  157. <title>Получение всего URI из объекта Zend_Uri_*</title>
  158. <programlisting language="php"><![CDATA[
  159. $uri = Zend_Uri::factory('http://www.zend.com');
  160. echo $uri->getUri(); // "http://www.zend.com"
  161. ]]></programlisting>
  162. </example>
  163. <para>
  164. Метод <code>getUri()</code> возвращает строковое представление всего
  165. URI.
  166. </para>
  167. </sect3>
  168. <sect3 id="zend.uri.instance-methods.valid">
  169. <title>Проверка URI на валидность</title>
  170. <para>
  171. <code>Zend_Uri::factory()</code> всегда производит синтаксическую
  172. проверку переданных ему URI и не будет создавать новый экземпляр
  173. подкласса <classname>Zend_Uri</classname>, если данный URI не прошел проверку.
  174. Тем не менее, после того, как был инстанцирован подкласс
  175. <classname>Zend_Uri</classname> для нового URI или на основе уже существующего,
  176. в результате манипуляций с ним этот URI может стать невалидным.
  177. </para>
  178. <example id="zend.uri.instance-methods.valid.example-1">
  179. <title>Проверка объекта Zend_Uri_*</title>
  180. <programlisting language="php"><![CDATA[
  181. $uri = Zend_Uri::factory('http://www.zend.com');
  182. $isValid = $uri->valid(); // TRUE
  183. ]]></programlisting>
  184. </example>
  185. <para>
  186. Метод <code>valid()</code> дает возможность проверить, является ли URI
  187. по-прежнему валидным.
  188. </para>
  189. </sect3>
  190. </sect2>
  191. </sect1>
  192. <!--
  193. vim:se ts=4 sw=4 et:
  194. -->