Содержание
- 9.1. Zend_Controller - Быстрый старт
- 9.1.1. Введение
- 9.1.2. Быстрый старт
- 9.1.2.1. Создайте свою файловую структуру
- 9.1.2.2. Установите корневую директорию для документов
- 9.1.2.3. Создайте свои правила перезаписи
- 9.1.2.4. Создайте свой файл загрузки
- 9.1.2.5. Создайте свой контроллер действий, используемый по умолчанию
- 9.1.2.6. Создайте свой скрипт вида
- 9.1.2.7. Создайте свой контроллер ошибок
- 9.1.2.8. Смотрим сайт!
- 9.2. Основы Zend_Controller
- 9.3. Фронт-контроллер
- 9.4. Объект запроса
- 9.5. Стандартный маршрутизатор: Zend_Controller_Router_Rewrite
- 9.5.1. Введение
- 9.5.2. Использование маршрутизатора
- 9.5.3. Базовые операции Rewrite Router
- 9.5.4. Маршруты по умолчанию
- 9.5.5. Базовый URL и поддиректории
- 9.5.6. Глобальные параметры
- 9.5.7. Типы маршрутов
- 9.5.8. Использование Zend_Config вместе с RewriteRouter
- 9.5.9. Создание подклассов маршрутизатора
- 9.6. Диспетчер
- 9.7. Контроллеры действий
- 9.8. Помощники действий
- 9.8.1. Введение
- 9.8.2. Инициализация помощника
- 9.8.3. Брокер помощников
- 9.8.4. Встроенные помощники действий
- 9.8.5. Написание собственных помощников
- 9.9. Объект ответа
- 9.10. Плагины
- 9.11. Использование определенной соглашением модульной структуры директорий
- 9.12. Исключения
- 9.13. Переход с предыдущих версий
- 9.13.1. Переход с 1.6.x на 1.7.0 и более поздние версии
- 9.13.2. Переход с 1.5.x на 1.6.0 и более поздние версии
- 9.13.3. Переход с 1.0.x на 1.5.0 и более поздние версии
- 9.13.4. Переход с 0.9.3 на 1.0.0RC1 и более поздние версии
- 9.13.5. Переход с 0.9.2 на 0.9.3 и более поздние версии
- 9.13.6. Переход с 0.6.0 на 0.8.0 и более поздние версии
- 9.13.7. Переход с 0.2.0 и более ранних версий на 0.6.0
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
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Этим правила перезаписи соотвественно направляют запросы к существующим ресурсам (существующие символьные ссылки, непустые файлы и директории), все остальные запросы перенаправляются к фронт-контроллеру.
![]() |
Замечание |
|---|---|
Вышеприведенные правила перезаписи предназначены для веб-сервера Apache. За примерами правил перезаписи для других веб-серверов см. документацию по маршрутизаторам. |
Файл загрузки - это страница, на которую направляются все
запросы, в нашем случае это html/index.php.
Откройте html/index.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 и
введите следующее:
/** Zend_Controller_Action */
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.
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/indexhttp://example.com/index/index
Теперь вы можете начать создавать другие контроллеры и методы действий. Поздравляем!


![[Замечание]](images/note.png)