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()
// Для того, чтобы создать с нуля новый 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() .
Example #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.
Example #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() :
Example #4 Разрешение использования спецсимволов в URI
// Содержит символ '|'
// Обычно такой вызов будет возвращать 'false':
$valid = Zend_Uri::check('http://example.com/?q=this|that');
// Тем не менее, вы можете разрешить "неумные" символы
Zend_Uri:: setConfig(array('allow_unwise' => true));
// будет возвращать 'true'
$valid = Zend_Uri::check('http://example.com/?q=this|that');
// Установка 'allow_unwise' обратно в FALSE
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_*
$uri = Zend_Uri::factory('http://www.zend.com');
$scheme = $uri->getScheme(); // "http"
Метод экземпляра getScheme() возвращает схему из URI.
Получение всего URI
Example #6 Получение всего URI из объекта Zend_Uri_*
$uri = Zend_Uri::factory('http://www.zend.com');
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_*
$uri = Zend_Uri::factory('http://www.zend.com');
$isValid = $uri->valid(); // TRUE
Метод valid() дает возможность проверить, является ли URI
по-прежнему валидным.
|
|