Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

ZEND FRAMEWORK: Класс Zend_Controller


PHP 5: Новые возможности.

В предлагаемом материале рассмотрен класс Zend_Controller и связанные с ним классы, а также освещена возможность их расширения.

Класс Zend_Controller_Front. Принимает на себя весь поток запросов к приложению и организует их дальнейшую обработку; в частности, согласует работу Zend_Controller_Router и Zend_Controller_Dispatcher.

Класс Zend_Controller_Router. Получает от Zend_Controller_Front запрошенный адрес и разбивает его на составные части (см. «Роутинг»). Возвращает результат своей работы в виде объекта Zend_Controller_Dispatcher_Token.

Класс Zend_Controller_Dispatcher. Получает от Zend_Controller_Front объект Zend_Controller_Dispatcher_Token, анализирует содержащуюся в нем информацию, находит и загружает соответствующий конечный контроллер (наследник Zend_Controller_Action) и вызывает запрошенный метод.

Класс Zend_Controller_Action. Родительский класс для конечных контроллеров, которые, собственно, и определяют поведение приложения. Именно их придется разрабатывать в процессе создания веб сайта.

В реальном приложении зачастую используются не сами классы, входящие в состав Zend Framework, а их наследники, расширяющие стандартные возможности родительских классов. Пожалуй, единственным компонентом из числа только что рассмотренных, который всегда используется в готовом виде, является класс Zend_Controller_Front.

Два других класса - Zend_Controller_Router и Zend_Controller_Dispatcher - обычно используются в готовом виде, но, при необходимости, могут быть и расширены. Поводом для такого расширения могут стать следующие ситуации.

  1. Интеграция приложения в существующий веб сайт, использующий систему адресации страниц, отличающуюся от принятой в Zend Framework.

  2. Невозможность или неудобство использовать для управления адреса страниц (например, в консольном приложении можно использовать аргументы командной строки).

  3. Потребность в реализации нестандартных конечных контроллеров (когда контроллеры не являются классами, а действия - их методами).

  4. Желание добавить дополнительные возможности во все контроллеры.
[Внимание]Внимание

Перекрытие столь важных системных составляющих, как роутер и диспетчер, следует осуществлять с предельной осторожностью, так как можно легко вместо ожидаемых дополнительных возможностей получить потерю существующих.

В частности, следует строго соблюдать принятые в Zend Framework соглашения относительно названий классов, структуры директорий и т. д. (см. Глава 5, Стандарты кодирования). В качестве префикса в названиях классов рекомендуется использовать название компании-разработчика; например, если компания называется Foo, то классы должны называться Foo_Controller_Router, Foo_Controller_Dispatcher и т. п., а для их хранения может быть использована следующая структура.

/
|---library/
|   |---Zend/
|   |---Foo/
|   |   |---Controller/
|   |   |   |---Router.php
|   |   |   |---Dispatcher.php
            

Кроме того, вместо наследования существующих, можно разработать и новые классы, использующие интерфейсы, соответственно, роутера (Пример 8.1, «Интерфейс Zend_Controller_Router_Interface») и диспетчера (Пример 8.2, «Интерфейс Zend_Controller_Dispatcher_Interface»).



Что касается класса Zend_Controller_Action, то он не может быть использован в готовом виде и всегда наследуется конечными контроллерами (см. «Специализированные контроллеры»).

  1. В секции «Расширения» приведен перечень ситуаций, в которых может быть целесообразно расширить стандартные классы Zend_Controller_Router и/или Zend_Controller_Dispatcher. В каких из этих ситуаций, на ваш взгляд, следует расширять роутер, а в каких - диспетчер?

  2. Перед программистами веб студии FooBar поставлена задача создания приложения, использующего свою собственную систему передачи управляющей информации в адресах страниц веб сайта. Какие расширения стандартных классов им придется разработать? В каких файлах следует сохранить новые классы?

  3. Разработайте конечный контроллер CalcController, выполняющий функции простейшего калькулятора и поддерживающий четыре арифметических действия с двумя операндами. По умолчанию можно выводить подсказку об использовании.

    [Подсказка]Подсказка

    Для получения заданных значений операндов используйте метод Zend_Controller_Action::_getAllParams().

  4. Добавьте разработанный контроллер в соответствующую директорию на своем сайте; проверьте его работоспособность.

    [Подсказка]Подсказка

    При необходимости внесите изменения в файл .htaccess.

«Ответы и решения к Глава 8, Класс Zend_Controller»

Created with DocBook


В избранное