Глава 39. Zend_Uri

39.1. Zend_Uri

39.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.

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

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

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

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

39.1.4. Проверка URI

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

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

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

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

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



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

    Поддержать сайт на родительском проекте КГБ