Глава 32. Zend_Uri

Содержание

32.1. Zend_Uri
32.1.1. Обзор
32.1.2. Создание нового URI
32.1.3. Работа с существующим URI
32.1.4. Проверка URI
32.1.5. Общие методы

32.1. Zend_Uri

32.1.1. Обзор

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

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

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

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() вернет свой подкласс, который специализируется на данной схеме.

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

Для того, чтобы работать с существующим 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() вернет свой подкласс, который специализируется на данной схеме.

32.1.4. Проверка URI

Функция 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() и отлов исключения.

32.1.5. Общие методы

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

32.1.5.1. Получение схемы 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.1.5.2. Получение всего 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.

32.1.5.3. Проверка 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 по-прежнему валидным.



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