Programmer's Reference Guide
| 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() была передана только схема.
Пример #1 Создание нового URI с Zend_Uri::factory()
- // Для того, чтобы создать с нуля новый URI, передайте только схему.
- $uri = Zend_Uri::factory('http');
- // $uri является экземпляром Zend_Uri_Http
Для того, чтобы создать с нуля новый URI, передайте
Zend_Uri::factory() только схему. [1]. При передаче не поддерживаемой схемы
генерируется исключение Zend_Uri_Exception.
Если переданные схема или URI поддерживаются, то
Zend_Uri::factory() вернет свой подкласс, который
специализируется на данной схеме.
Работа с существующим URI
Для того, чтобы работать с существующим URI, передайте его весь целиком
Zend_Uri::factory().
Пример #2 Работа с существующим URI через Zend_Uri::factory()
- // Чтобы работать с существующим URI, передайте его как параметр
- $uri = Zend_Uri::factory('http://www.zend.com');
- // $uri является экземпляром Zend_Uri_Http
URI будет распарсен и проверен на валидность. Если он оказался невалидным,
то сразу же будет сгенерировано исключение
Zend_Uri_Exception. Иначе Zend_Uri::factory()
вернет свой подкласс, который специализируется на данной схеме.
Проверка URI
Функция Zend_Uri::check() может использоваться в том случае,
когда нужна только проверка существующего URI.
Пример #3 Проверка URI с помощью Zend_Uri::check()
- // Проверка, является ли данный URI синтаксически корректным
- $valid = Zend_Uri::check('http://uri.in.question');
- // $valid равен TRUE при валидном URI, иначе FALSE
Zend_Uri::check() возвращает булево значение, использование
этой функции более удобно, чем вызов Zend_Uri::factory() и
отлов исключения.
Разрешение использования "неумных" символов в URI
По умолчанию Zend_Uri не будет принимать
следующие символы, которые в спецификации определены как "неумные"
(unwise) и невалидные: "{", "}", "|", "\", "^", "`".
Тем не менее, многие реализации принимают эти символы как валидные.
Можно заставить Zend_Uri принимать эти
символы путем установки 'allow_unwise' в TRUE, используя метод
Zend_Uri::setConfig():
Пример #4 Разрешение использования спецсимволов в URI
- // Содержит символ '|'
- // Обычно такой вызов будет возвращать 'false':
- $valid = Zend_Uri::check('http://example.com/?q=this|that');
- // Тем не менее, вы можете разрешить "неумные" символы
- // будет возвращать 'true'
- $valid = Zend_Uri::check('http://example.com/?q=this|that');
- // Установка 'allow_unwise' обратно в FALSE
Замечание:
Zend_Uri::setConfig()глобально устанавливает опции конфигурации. Рекомендуется сбрасывать опцию 'allow_unwise' в 'false', как показано в примере выше, если только вы не хотите разрешить использование "неумных" символов на все время во всем приложении.
Общие методы экземпляров
Каждый экземпляр подкласса Zend_Uri (например, Zend_Uri_Http) имеет несколько методов, полезных для работы с любыми видами URI.
Получение схемы URI
Схема URI – часть URI, завершающаяся двоеточием. Например, схемой в
http://www.zend.com является http.
Пример #5 Получение схемы из объекта Zend_Uri_*
- $uri = Zend_Uri::factory('http://www.zend.com');
- $scheme = $uri->getScheme(); // "http"
Метод экземпляра getScheme() возвращает схему из URI.
Получение всего URI
Пример #6 Получение всего URI из объекта Zend_Uri_*
- $uri = Zend_Uri::factory('http://www.zend.com');
Метод getUri() возвращает строковое представление всего
URI.
Проверка URI на валидность
Zend_Uri::factory() всегда производит синтаксическую
проверку переданных ему URI и не будет создавать новый экземпляр
подкласса Zend_Uri, если данный URI не прошел проверку.
Тем не менее, после того, как был инстанцирован подкласс
Zend_Uri для нового URI или на основе уже существующего,
в результате манипуляций с ним этот URI может стать невалидным.
Пример #7 Проверка объекта Zend_Uri_*
- $uri = Zend_Uri::factory('http://www.zend.com');
- $isValid = $uri->valid(); // TRUE
Метод valid() дает возможность проверить, является ли URI
по-прежнему валидным.
| Zend_Uri |
