Содержание
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()
была передана только схема.
Пример 39.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()
только схему. [14]. При передаче не поддерживаемой схемы
генерируется исключение Zend_Uri_Exception
.
Если переданные схема или URI поддерживаются, то
Zend_Uri::factory()
вернет свой подкласс, который
специализируется на данной схеме.
Для того, чтобы работать с существующим URI, передайте его весь целиком
Zend_Uri::factory()
.
Пример 39.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.
Пример 39.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
.
Пример 39.4. Получение схемы из объекта Zend_Uri_*
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); $scheme = $uri->getScheme(); // "http" ?>
Метод экземпляра getScheme()
возвращает схему из URI.
Пример 39.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 может стать невалидным.
Пример 39.6. Проверка объекта Zend_Uri_*
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); $isValid = $uri->valid(); // TRUE ?>
Метод valid()
дает возможность проверить, является ли URI
по-прежнему валидным.