Глава 26. Zend_Uri
Пред. |  | След.

## Глава 26. Zend_Uri

## 26.1. Zend_Uri

### 26.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`.

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

`Zend_Uri` будет строить с нуля новый URI, если `Zend_Uri::factory()` была передана только схема.

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

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

Для того, чтобы работать с существующим URI, передайте его весь целиком `Zend_Uri::factory()`.

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

### 26.1.4. Проверка URI

Функция `Zend_Uri::check()` может использоваться в том случае, когда нужна только проверка существующего URI.

Пример 26.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()` и отлов исключения.

### 26.1.5. Общие методы

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

#### 26.1.5.1. Получение схемы URI

Схема URI – часть URI, завершающаяся двоеточием. Например, схемой в `http://www.zend.com` является `http`.

Пример 26.4. Получение схемы из объекта `Zend_Uri_*`

    <?php

    require_once 'Zend/Uri.php';

    $uri = Zend_Uri::factory('http://www.zend.com');

    $scheme = $uri->getScheme();  // "http"

    ?>

Метод экземпляра `getScheme()` возвращает схему из URI.

#### 26.1.5.2. Получение всего URI

Пример 26.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.

#### 26.1.5.3. Проверка URI на валидность

`Zend_Uri::factory()` всегда производит синтаксическую проверку переданных ему URI и не будет создавать новый экземпляр подкласса `Zend_Uri`, если данный URI не прошел проверку. Тем не менее, после того, как был инстанцирован подкласс `Zend_Uri` для нового URI или на основе уже существующего, в результате манипуляций с ним этот URI может стать невалидным.

Пример 26.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.

Пред. |  | След.
25.5. Теория | Начало | Глава 27. Zend_Validate