Programmer's Reference Guide
| Zend_Controller - Быстрый старт |
Основы Zend_Controller
Система Zend_Controller спроектирована быть легковесной,
модульной и расширяемой. Ее минимализм допускает гибкость и некоторую
свободу в использовании, при этом она достаточно структурирована, чтобы
системы, построенные с использованием Zend_Controller,
использовали некоторые общие соглашения и сходное размещение кода.
Следующая диаграмма отображает рабочий процесс системы, далее подробно описывается их взаимодействие:

Рабочий процесс Zend_Controller осуществляется несколькими
компонентами. Несмотря на то, что для использования этой системы нет
необходимости в совершенном понимании внутренней работы всех этих
компонент, полезно иметь практическое представление об этом процессе.
-
Фронт-контроллер (
Zend_Controller_Front) управляет всем рабочим процессом системыZend_Controller. Это одна из интерпретаций паттерна FrontController.Zend_Controller_Frontобрабатывает все запросы, полученные сервером, и в конечном счете отвечает за делегацию запросов контроллерам действий (Zend_Controller_Action). -
Zend_Controller_Request_Abstract(часто называетсяобъектом запроса) представляет переменные запроса и предоставляет методы для установки и получения имен контроллера, действия и любых параметров запроса. Кроме того, он отслеживает, было ли обработано содержащееся в нем действие диспетчеромZend_Controller_Dispatcher. Расширения абстрактного объекта запроса могут использоваться для инкапсуляции всех переменных запроса, позволяя роутерам извлекать информацию из переменных запроса для того, чтобы устанавливать имена контроллера и действия.По умолчанию используется
Zend_Controller_Request_Http. Он предоставляет доступ ко всем переменным HTTP-запроса. -
Zend_Controller_Router_Interfaceиспользуется для описания маршрутизаторов. Маршрутизация — это процесс исследования переменных запроса для определения того, какой контроллер и какое действие в этом контроллере должны получить этот запрос. Эти контроллер, действие и опциональные параметры устанавливаются в объекте запроса для обработки диспетчеромZend_Controller_Dispatcher_Standard. Маршрутизация производится только один раз: когда вначале получен запрос и до того, как первый контроллер примет управление.Используемый по умолчанию маршрутизатор
Zend_Controller_Router_Rewriteпринимает конечную точку URI в том виде, в котором она определена вZend_Controller_Request_Http, и разлагает ее на контроллер, действие и параметры, основываясь на пути в URL. Например, URLhttp://localhost/foo/bar/key/valueбудет расшифрован следующим образом: контроллерfoo, действиеbarи параметрkeyсо значениемvalue.Zend_Controller_Router_Rewriteможет также использоваться для сопоставления с произвольными путями, за более подробной информацией см. документацию по Rewrite Router -
Zend_Controller_Dispatcher_Interfaceиспользуется для описания диспетчеров. Диспетчеризация — это процесс извлечения контроллера и действия из объекта запроса, нахождения соответствующих файла/класса контроллера и метода действия в классе контроллера. Ситуации, когда соответствующие контроллер или действие не найдены, решаются определением контроллеров и действий по умолчанию.В действии процесс диспетчеризации состоит из инстанцирования класса контроллера и вызова метода действия в этом классе. В отличие от маршрутизации, которая производится только один раз, диспетчеризация производится циклически. Если флаг диспетчеризации объекта запроса сбрасывается, то цикл будет повторяться, при этом вызывается действие, которое будет установлено на данный момент в объекте запроса. Если итерация цикла завершится с установленным флагом диспетчеризации (значение
true) в объекте запроса, то процесс диспетчеризации завершается.По умолчанию используется диспетчер
Zend_Controller_Dispatcher_Standard. Он определяет контроллеры как классы с именами, завершающимися словом Controller, и в которых все слова начинаются со сточной буквы (MixedCase), методы действий — как методы с именами, завершающимися словом Action, и в которых все слова, кроме первого, начинаются со строчной буквы (camelCase):SomeFooController::barAction. В этом случае на контроллер нужно ссылаться как наsomefoo, а на действие как наbar.Замечание: Соглашения по именованию
Общеизвестно, что в случае ручного набора адресов удобство и поддержка чувствительности регистра несовместимы в принципе, поэтому Zend Framework приводит пути в URL к нижнему регистру. Само собой, это влияет на то, как вы именуете свои контроллеры и действия... или ссылаетесь на них в URL.
Если вы хотите иметь классы контроллеров или методы действий с именами, состоящими из нескольких слов, разделенных в стиле MixedCase или camelCase, то нужно разделить эти слова в URL с помощью '-' или '.' (можно указать другой символ-разделитель).
Например, если вы собираетесь использовать действиеFooBarController::bazBatAction(), то должны ссылаться на него в URL как на/foo-bar/baz-batили/foo.bar/baz.bat.
-
Zend_Controller_Action— базовая составляющая контроллера действий. Каждый контроллер является отдельным классом, расширяющимZend_Controller_Action, и этот класс должен содержать один или более методов действий. -
Zend_Controller_Response_Abstractопределяет базовый класс ответа, используемый для сбора и возвращения ответов из контроллеров действий. Он собирает как тело ответа, так и заголовки.По умолчанию используется класс
Zend_Controller_Response_Http, который подходит для использования в среде HTTP.
Рабочий процесс Zend_Controller относительно простой.
Запрос получается объектом Zend_Controller_Front,
который в свою очередь вызывает
Zend_Controller_Router_Rewrite для определения того, какой
контроллер (и какое действие в этом контроллере) следует использовать.
Zend_Controller_Router_Rewrite
анализирует URI для установки имени контроллера и имени действия в
запросе. Затем Zend_Controller_Front входит в цикл
диспетчеризации. Он вызывает
Zend_Controller_Dispatcher_Standard, передавая ему
запрос для запуска контроллера и действия, определенных в запросе
(или тех, которые используются по умолчанию). После того, как
контроллер завершит работу, управление возвращается
Zend_Controller_Front. Если предыдущий контроллер
переустановкой статуса диспетчеризации в запросе
указал, что должен быть запущен другой контроллер, то цикл
продолжается и выполняется запуск другого контроллера. В противном
случае процесс завершается.
| Zend_Controller - Быстрый старт |
Select a Version
Languages Available
Components
Search the Manual
Navigation
- Руководство разработчика
- Руководство разработчика
- Zend_Controller
- Zend_Controller - Быстрый старт
- Основы Zend_Controller
- Фронт-контроллер
- Объект запроса
- Стандартный маршрутизатор: Zend_Controller_Router_Rewrite
- Диспетчер
- Контроллеры действий
- Помощники действий
- Объект ответа
- Плагины
- Использование определенной соглашением модульной структуры директорий
- Исключения
- Переход с предыдущих версий
