Содержание
Zend_Uri является компонентой, которая призвана облегчить
работу с URI (Uniform Resource
Identifiers) и их валидацию. Zend_Uri был создан для
обслуживания других компонент, таких, как Zend_Http_Client,
но полезен и как отдельная утилита.
URI всегда начинаются со схемы, после которой следует двоеточие. Структура
для разных схем может сильно отличаться. Класс Zend_Uri
предоставляет фабрику (паттерн factory), которая возвращает его подклассы,
специализирующиеся в различных схемах. Подклассы называются
Zend_Uri_<scheme>, где <scheme> -
схема в нижнем регистре, с прописной первой буквой. Исключением из этого
правила является HTTPS, который обрабатывается подклассом
Zend_Uri_Http.
Zend_Uri будет строить с нуля новый URI, если
Zend_Uri::factory() была передана только схема.
Пример 32.1. Создание нового URI с Zend_Uri::factory()
<?php
require_once 'Zend/Uri.php';
// Для того, чтобы создать с нуля новый URI, передайте только схему.
$uri = Zend_Uri::factory('http');
// $uri является экземпляром Zend_Uri_Http
?>
Для того, чтобы создать с нуля новый URI, передайте
Zend_Uri::factory() только схему. [11]. При передаче не поддерживаемой схемы
генерируется исключение Zend_Uri_Exception.
Если переданные схема или URI поддерживаются, то
Zend_Uri::factory() вернет свой подкласс, который
специализируется на данной схеме.
Для того, чтобы работать с существующим URI, передайте его весь целиком
Zend_Uri::factory().
Пример 32.2. Работа с существующим URI с Zend_Uri::factory()
<?php
require_once 'Zend/Uri.php';
// Чтобы работать с существующим URI, передайте его как параметр
$uri = Zend_Uri::factory('http://www.zend.com');
// $uri является экземпляром Zend_Uri_Http
?>
URI будет распарсен и проверен на валидность. Если он оказался невалидным,
то сразу же будет сгенерировано исключение
Zend_Uri_Exception. Иначе Zend_Uri::factory()
вернет свой подкласс, который специализируется на данной схеме.
Функция Zend_Uri::check() может использоваться в том случае,
когда нужна только проверка существующего URI.
Пример 32.3. Проверка URI с помощью Zend_Uri::check()
<?php
require_once 'Zend/Uri.php';
// Проверка, является ли данный URI синтаксически корректным
$valid = Zend_Uri::check('http://uri.in.question');
// $valid равен TRUE при валидном URI, иначе FALSE
?>
Zend_Uri::check() возвращает булево значение, использование
этой функции более удобно, чем вызов Zend_Uri::factory() и
отлов исключения.
Каждый экземпляр подкласса Zend_Uri (т.е.
Zend_Uri_Http) имеет несколько методов экземпляров, которые
полезны для работы с любыми видами URI.
Схема URI – часть URI, завершающаяся двоеточием. Например, схемой в
http://www.zend.com является http.
Пример 32.4. Получение схемы из объекта Zend_Uri_*
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
$scheme = $uri->getScheme(); // "http"
?>
Метод экземпляра getScheme() возвращает схему из URI.
Пример 32.5. Получение всего URI из объекта Zend_Uri_*
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
echo $uri->getUri(); // "http://www.zend.com"
?>
Метод getUri() возвращает строковое представление всего
URI.
Zend_Uri::factory() всегда производит синтаксическую
проверку переданных ему URI и не будет создавать новый экземпляр
подкласса Zend_Uri, если данный URI не прошел проверку.
Тем не менее, после того, как был инстанцирован подкласс
Zend_Uri для нового URI или на основе уже существующего,
в результате манипуляций с ним этот URI может стать невалидным.
Пример 32.6. Проверка объекта Zend_Uri_*
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
$isValid = $uri->valid(); // TRUE
?>
Метод valid() дает возможность проверить, является ли URI
по-прежнему валидным.