Содержание
- 7.1. Zend_Controller - Быстрый старт
- 7.1.1. Введение
- 7.1.2. Быстрый старт
- 7.1.2.1. Создайте свою файловую структуру
- 7.1.2.2. Установите корневую директорию для документов
- 7.1.2.3. Создайте свои правила перезаписи
- 7.1.2.4. Создайте свой файл загрузки
- 7.1.2.5. Создайте свой контроллер действий, используемый по умолчанию
- 7.1.2.6. Создайте свой скрипт вида
- 7.1.2.7. Создайте свой контроллер ошибок
- 7.1.2.8. Смотрим сайт!
- 7.2. Основы Zend_Controller
- 7.3. Фронт-контроллер
- 7.4. Объект запроса
- 7.5. Стандартный маршрутизатор: Zend_Controller_Router_Rewrite
- 7.6. Диспетчер
- 7.7. Контроллеры действий
- 7.8. Помощники действий
- 7.8.1. Введение
- 7.8.2. Инициализация помощника
- 7.8.3. Брокер помощников
- 7.8.4. Встроенные помощники действий
- 7.8.5. Написание собственных помощников
- 7.9. Объект ответа
- 7.10. Плагины
- 7.11. Использование определенной соглашением модульной структуры директорий
- 7.12. Исключения
- 7.13. Переход с предыдущих версий
Zend_Controller
является ядром системы MVC в Zend
Framework. Аббревиатура MVC - сокращение от
Model-View-Controller
(модель-вид-контроллер), это паттерн проектирования, предназначенный
для отделения логики приложения от логики представления.
Zend_Controller_Front
реализует паттерн
Front
Controller, в котором все запросы перехватываются
фронт-контроллером (front controller) и перенаправляются отдельным
контроллерам действий (action controllers), выбор которых
производится по запрошенному URL.
Система Zend_Controller
построена с расчетом на
расширяемость как через наследование от уже существующих классов
и написание новых классов, реализующих различные интерфейсы и
абстрактные классы, образующих основу семейства классов
контроллеров, так и через написание плагинов или помощников действий
для наращивания функциональности системы или управления ею.
Если вам нужна более подробная информация, то сразу переходите к
следующим разделам. Если хотите быстро начать работать с
Zend_Controller
, то читайте далее.
Первый шаг состоит в том, чтобы создать файловую структуру приложения. Ниже приведено типовое решение:
application/ controllers/ IndexController.php models/ views/ scripts/ index/ index.phtml helpers/ filters/ html/ .htaccess index.php
В своем веб-сервере установите директорию html
из
приведенной выше структуры в качестве корневой для
веб-документов.
Отредактируйте файл html/.htaccess
из
приведенной выше структуры следующим образом:
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Эти правила будут направлять запросы, не адресованные к ресурсам (изображения, css), ко фронт-контроллеру. Если есть файлы с другими расширениями, которые вы не хотите адресовать фронт-контроллеру (файлы PDF, текстовые файлы и т.д.), то добавьте также эти расширения в соответствующее правило или создайте собственные правила перезаписи.
Замечание | |
---|---|
Вышеприведенные правила перезаписи предназначены для веб-сервера Apache. За примерами правил перезаписи для других веб-серверов см. документацию по маршрутизаторам. |
Файл загрузки - это страница, на которую направляются все
запросы, в нашем случае это html/index.php
.
Откройте html/index.php
в любом текстовом редакторе
и добавьте следующие строки:
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('/path/to/app/controllers');
Этот код выполняет инстанцирование и запуск фронт-контроллера, который будет направлять запросы к контроллерам действий.
До того, как начать обсуждение контроллеров действий, нужно
сначала понять, как обрабатываются запросы в Zend Framework. По
умолчанию первая часть пути в URL соответствует контроллеру, а
вторая - действию. Например, дан URL
http://framework.zend.com/roadmap/components
. В нем
путь /roadmap/components
будет соответствовать
контроллеру roadmap
и действию
components
. Если не передано имя действия, то
предполагается действие index
; если не передано имя
контроллера, то предполагается контроллер index
(по
соглашению Apache это соответствует
DirectoryIndex
).
Диспетчер Zend_Controller
принимает значение
контроллера и находит соответствующий ему класс. По умолчанию
это имя контроллера, начинающееся с заглавной буквы и со словом
Controller
в конце. Таким образом, контроллер
roadmap
будет соответствовать классу
RoadmapController
.
Аналогичным образом устанавливается соответствие значения
действия методу класса контроллера. По умолчанию значение
приводится к нижнему регистру и к нему присоединяется слово
Action
. Таким образом, в нашем примере выше
действие components
будет методом с именем
componentsAction
, и в итоге вызов метода
будет выглядеть следующим образом:
RoadmapController::componentsAction()
.
Итак, двигаемся дальше. Теперь приступим к созданию контроллера
и действия, используемых по умолчанию. Как было замечено ранее,
эти контроллер и действие должны оба называться
index
. Откройте файл
application/controllers/IndexController.php
и
введите следующее:
<?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { } }
По умолчанию включен помощник действий ViewRenderer.
Это означает, что, просто определив метод действия и
соответствующий скрипт вида, вы получите рендеринг контента.
По умолчанию в MVC в качестве "вида" используется
Zend_View
. render()
использует имя
контроллера (например, index
) и имя текущего
действия (например, index
) для определения того,
какой шаблон тянуть. По умолчанию шаблоны имеют расширение
.phtml
, это значит, что в нашем примере будет
использоваться шаблон index/index.phtml
. Кроме
этого, ViewRenderer
автоматически
предполагает, что директория views
, находящаяся на
том же уровне, что и директория контроллера, будет базовой
директорией видов, и что действующие скрипты вида будут в
поддиректории views/scripts/
.
Таким образом, шаблон для рендеринга будет находится в
application/views/scripts/index/index.phtml
.
Как было упомянуто в предыдущем
разделе, скрипты вида находятся в
application/views/scripts/
. Скриптом вида для
контроллера и действия, используемых по умолчанию, является
application/views/scripts/index/index.phtml
.
Создайте этот файл и добавьте в него какой-либо HTML-код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>My first Zend Framework App</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
По умолчанию зарегистрирован плагин-обработчик
ошибок. Этот плагин ожидает, что есть контроллер для
обработки ошибок. По умолчанию он предполагает, что в модуле,
используемом по умолчанию, имеется контроллер
ErrorController
с методом errorAction
.
<?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class ErrorController extends Zend_Controller_Action { public function errorAction() { } }
Согласно уже обсуждаемой выше структуре директорий этот файл
будет находиться по пути
application/controllers/ErrorController.php
. Нужно
также создать скрипт вида
application/views/scripts/error/error.phtml
, пример
его содержимого:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Error</title> </head> <body> <h1>An error occurred</h1> <p>An error occurred; please try again later.</p> </body> </html>
Теперь, имея свои первые контроллер и вид, вы можете
запустить свой броузер и просматривать сайт. Если ваш домен -
example.com
, то любой из следующих URL-ов будет
возвращать ту страницу, которую вы только что создали:
http://example.com/
http://example.com/index
http://example.com/index/index
Теперь вы можете начать создавать другие контроллеры и методы действий. Поздравляем!