Zend_Uri Обзор Zend_Uri является компонентой, которая призвана облегчить работу с URI (Uniform Resource Identifiers) и их валидацию. Zend_Uri был создан для обслуживания других компонент, таких, как Zend_Http_Client, но полезен и как отдельная утилита. URI всегда начинаются со схемы, после которой следует двоеточие. Структура для разных схем может сильно отличаться. Класс Zend_Uri предоставляет фабрику (паттерн factory), которая возвращает его подклассы, специализирующиеся в различных схемах. Подклассы называются Zend_Uri_<scheme>, где <scheme> - схема в нижнем регистре, с прописной первой буквой. Исключением из этого правила является HTTPS, который обрабатывается подклассом Zend_Uri_Http. Создание нового URI Zend_Uri будет строить с нуля новый URI, если Zend_Uri::factory() была передана только схема. Создание нового URI с Zend_Uri::factory() Для того, чтобы создать с нуля новый URI, передайте Zend_Uri::factory() только схему. На момент написания этой документации Zend_Uri поддерживает только схемы HTTP и HTTPS.. При передаче не поддерживаемой схемы генерируется исключение Zend_Uri_Exception. Если переданные схема или URI поддерживаются, то Zend_Uri::factory() вернет свой подкласс, который специализируется на данной схеме. Работа с существующим URI Для того, чтобы работать с существующим URI, передайте его весь целиком Zend_Uri::factory(). Работа с существующим URI через Zend_Uri::factory() URI будет распарсен и проверен на валидность. Если он оказался невалидным, то сразу же будет сгенерировано исключение Zend_Uri_Exception. Иначе Zend_Uri::factory() вернет свой подкласс, который специализируется на данной схеме. Проверка URI Функция Zend_Uri::check() может использоваться в том случае, когда нужна только проверка существующего URI. Проверка URI с помощью Zend_Uri::check() Zend_Uri::check() возвращает булево значение, использование этой функции более удобно, чем вызов Zend_Uri::factory() и отлов исключения. Разрешение использования "неумных" символов в URI По умолчанию Zend_Uri не будет принимать следующие символы, которые в спецификации определены как "неумные" (unwise) и невалидные: "{", "}", "|", "\", "^", "`". Тем не менее, многие реализации принимают эти символы как валидные. Можно заставить Zend_Uri принимать эти символы путем установки 'allow_unwise' в TRUE, используя метод Zend_Uri::setConfig(): Разрешение использования спецсимволов в URI true)); // будет возвращать 'true' $valid = Zend_Uri::check('http://example.com/?q=this|that'); // Установка 'allow_unwise' обратно в FALSE Zend_Uri::setConfig(array('allow_unwise' => false)); ]]> Zend_Uri::setConfig() глобально устанавливает опции конфигурации. Рекомендуется сбрасывать опцию 'allow_unwise' в 'false', как показано в примере выше, если только вы не хотите разрешить использование "неумных" символов на все время во всем приложении. Общие методы экземпляров Каждый экземпляр подкласса Zend_Uri (например, Zend_Uri_Http) имеет несколько методов, полезных для работы с любыми видами URI. Получение схемы URI Схема URI – часть URI, завершающаяся двоеточием. Например, схемой в http://www.zend.com является http. Получение схемы из объекта Zend_Uri_* getScheme(); // "http" ]]> Метод экземпляра getScheme() возвращает схему из URI. Получение всего URI Получение всего URI из объекта Zend_Uri_* getUri(); // "http://www.zend.com" ]]> Метод getUri() возвращает строковое представление всего URI. Проверка URI на валидность Zend_Uri::factory() всегда производит синтаксическую проверку переданных ему URI и не будет создавать новый экземпляр подкласса Zend_Uri, если данный URI не прошел проверку. Тем не менее, после того, как был инстанцирован подкласс Zend_Uri для нового URI или на основе уже существующего, в результате манипуляций с ним этот URI может стать невалидным. Проверка объекта Zend_Uri_* valid(); // TRUE ]]> Метод valid() дает возможность проверить, является ли URI по-прежнему валидным.