Главная / Zend Manual Core
Zend_Uri

Zend_Uri

Обзор

Zend_Uri является компонентой, которая призвана облегчить работу с URI (» Uniform Resource Identifiers) и их валидацию. Zend_Uri был создан для обслуживания других компонент, таких, как Zend_Http_Client, но полезен и как отдельная утилита.

URI всегда начинаются со схемы, после которой следует двоеточие. Структура для разных схем может сильно отличаться. Класс Zend_Uri предоставляет фабрику (паттерн factory), которая возвращает его подклассы, специализирующиеся в различных схемах. Подклассы называются Zend_Uri_<scheme>, где <scheme> - схема в нижнем регистре, с прописной первой буквой. Исключением из этого правила является HTTPS, который обрабатывается подклассом Zend_Uri_Http.

Создание нового URI

Zend_Uri будет строить с нуля новый URI, если Zend_Uri::factory() была передана только схема.

Example #1 Создание нового URI с Zend_Uri::factory()

  1. // Для того, чтобы создать с нуля новый URI, передайте только схему.
  2. $uri = Zend_Uri::factory('http');
  3.  
  4. // $uri является экземпляром Zend_Uri_Http

Для того, чтобы создать с нуля новый URI, передайте Zend_Uri::factory() только схему. [1]. При передаче не поддерживаемой схемы генерируется исключение Zend_Uri_Exception.

Если переданные схема или URI поддерживаются, то Zend_Uri::factory() вернет свой подкласс, который специализируется на данной схеме.

Работа с существующим URI

Для того, чтобы работать с существующим URI, передайте его весь целиком Zend_Uri::factory().

Example #2 Работа с существующим URI через Zend_Uri::factory()

  1. // Чтобы работать с существующим URI, передайте его как параметр
  2. $uri = Zend_Uri::factory('http://www.zend.com');
  3.  
  4. // $uri является экземпляром Zend_Uri_Http

URI будет распарсен и проверен на валидность. Если он оказался невалидным, то сразу же будет сгенерировано исключение Zend_Uri_Exception. Иначе Zend_Uri::factory() вернет свой подкласс, который специализируется на данной схеме.

Проверка URI

Функция Zend_Uri::check() может использоваться в том случае, когда нужна только проверка существующего URI.

Example #3 Проверка URI с помощью Zend_Uri::check()

  1. // Проверка, является ли данный URI синтаксически корректным
  2. $valid = Zend_Uri::check('http://uri.in.question');
  3.  
  4. // $valid равен TRUE при валидном URI, иначе FALSE

Zend_Uri::check() возвращает булево значение, использование этой функции более удобно, чем вызов Zend_Uri::factory() и отлов исключения.

Разрешение использования "неумных" символов в URI

По умолчанию Zend_Uri не будет принимать следующие символы, которые в спецификации определены как "неумные" (unwise) и невалидные: "{", "}", "|", "\", "^", "`". Тем не менее, многие реализации принимают эти символы как валидные.

Можно заставить Zend_Uri принимать эти символы путем установки 'allow_unwise' в TRUE, используя метод Zend_Uri::setConfig():

Example #4 Разрешение использования спецсимволов в URI

  1. // Содержит символ '|'
  2. // Обычно такой вызов будет возвращать 'false':
  3. $valid = Zend_Uri::check('http://example.com/?q=this|that');
  4.  
  5. // Тем не менее, вы можете разрешить "неумные" символы
  6. Zend_Uri::setConfig(array('allow_unwise' => true));
  7. // будет возвращать 'true'
  8. $valid = Zend_Uri::check('http://example.com/?q=this|that');
  9.  
  10. // Установка 'allow_unwise' обратно в FALSE
  11. Zend_Uri::setConfig(array('allow_unwise' => false));

Note: Zend_Uri::setConfig() глобально устанавливает опции конфигурации. Рекомендуется сбрасывать опцию 'allow_unwise' в 'false', как показано в примере выше, если только вы не хотите разрешить использование "неумных" символов на все время во всем приложении.

Общие методы экземпляров

Каждый экземпляр подкласса Zend_Uri (например, Zend_Uri_Http) имеет несколько методов, полезных для работы с любыми видами URI.

Получение схемы URI

Схема URI – часть URI, завершающаяся двоеточием. Например, схемой в http://www.zend.com является http.

Example #5 Получение схемы из объекта Zend_Uri_*

  1. $uri = Zend_Uri::factory('http://www.zend.com');
  2.  
  3. $scheme = $uri->getScheme()// "http"

Метод экземпляра getScheme() возвращает схему из URI.

Получение всего URI

Example #6 Получение всего URI из объекта Zend_Uri_*

  1. $uri = Zend_Uri::factory('http://www.zend.com');
  2.  
  3. echo $uri->getUri()// "http://www.zend.com"

Метод getUri() возвращает строковое представление всего URI.

Проверка URI на валидность

Zend_Uri::factory() всегда производит синтаксическую проверку переданных ему URI и не будет создавать новый экземпляр подкласса Zend_Uri, если данный URI не прошел проверку. Тем не менее, после того, как был инстанцирован подкласс Zend_Uri для нового URI или на основе уже существующего, в результате манипуляций с ним этот URI может стать невалидным.

Example #7 Проверка объекта Zend_Uri_*

  1. $uri = Zend_Uri::factory('http://www.zend.com');
  2.  
  3. $isValid = $uri->valid()// TRUE

Метод valid() дает возможность проверить, является ли URI по-прежнему валидным.

[1]На момент написания этой документации Zend_Uri поддерживает только схемы HTTP и HTTPS.

Zend_Uri