Главная / Zend Manual Core
Zend_Controller

Zend_Controller - Быстрый старт

Введение

Zend_Controller является ядром системы MVC в Zend Framework. Аббревиатура MVC - сокращение от » Model-View-Controller (модель-вид-контроллер), это паттерн проектирования, предназначенный для отделения логики приложения от логики представления. Zend_Controller_Front реализует паттерн » Front Controller, в котором все запросы перехватываются фронт-контроллером (front controller) и перенаправляются отдельным контроллерам действий (action controllers), выбор которых производится по запрошенному URL.

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

Быстрый старт

Если вам нужна более подробная информация, то сразу переходите к следующим разделам. Если хотите быстро начать работать с Zend_Controller, то читайте далее.

Создайте файловую структуру

Первый шаг состоит в том, чтобы создать файловую структуру приложения. Ниже приведено типовое решение:

  1. application/
  2.     controllers/
  3.         IndexController.php
  4.     models/
  5.     views/
  6.         scripts/
  7.             index/
  8.                 index.phtml
  9.         helpers/
  10.         filters/
  11. html/
  12.     .htaccess
  13.     index.php

Установите корневую директорию для документов

В своем веб-сервере установите директорию html из приведенной выше структуры в качестве корневой для веб-документов.

Создайте свои правила перезаписи

Отредактируйте файл html/.htaccess из приведенной выше структуры следующим образом:

  1. RewriteEngine On
  2. RewriteCond %{REQUEST_FILENAME} -s [OR]
  3. RewriteCond %{REQUEST_FILENAME} -l [OR]
  4. RewriteCond %{REQUEST_FILENAME} -d
  5. RewriteRule ^.*$ - [NC,L]
  6. RewriteRule ^.*$ index.php [NC,L]

Note: Узнайте больше о mod_rewrite
Приведенные выше правила перезаписи позволяют получить доступ к любому файлу в корневой для веб-документов директории вашего виртуального хоста. Если в ней есть файлы, которые нужно скрыть от посторонних глаз, то вы наверное захотите установить более строгие правила. Перейдите на сайт Apache, чтобы » узнать больше о mod_rewrite.

Если у вас IIS 7.0, то используйте следующую конфигурацию перезаписи:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.      <system.webServer>
  4.          <rewrite>
  5.              <rules>
  6.                  <rule name="Imported Rule 1" stopProcessing="true">
  7.                      <match url="^.*$" />
  8.                      <conditions logicalGrouping="MatchAny">
  9.                          <add input="{REQUEST_FILENAME}"
  10.                              matchType="IsFile" pattern=""
  11.                              ignoreCase="false" />
  12.                          <add input="{REQUEST_FILENAME}"
  13.                              matchType="IsDirectory"
  14.                              pattern="" ignoreCase="false" />
  15.                      </conditions>
  16.                      <action type="None" />
  17.                  </rule>
  18.                  <rule name="Imported Rule 2" stopProcessing="true">
  19.                      <match url="^.*$" />
  20.                      <action type="Rewrite" url="index.php" />
  21.                  </rule>
  22.              </rules>
  23.          </rewrite>
  24.      </system.webServer>
  25. </configuration>

Эти правила перезаписи пропускают запросы к существующим ресурсам (существующие символьные ссылки, непустые файлы и директории), все остальные запросы перенаправляются к фронт-контроллеру.

Note: Вышеприведенные правила перезаписи предназначены для веб-сервера Apache. За примерами правил перезаписи для других веб-серверов см. документацию по маршрутизаторам.

Создайте файл загрузки

Файл загрузки - это страница, на которую направляются все запросы, в нашем случае это html/index.php. Откройте html/index.php в любом текстовом редакторе и добавьте следующие строки:

  1. 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 и введите следующее:

  1. /** Zend_Controller_Action */
  2. class IndexController extends Zend_Controller_Action
  3. {
  4.     public function indexAction()
  5.     {
  6.     }
  7. }

По умолчанию включен помощник действий 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-код:

  1. <!DOCTYPE html
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html>
  5. <head>
  6.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7.   <title>My first Zend Framework App</title>
  8. </head>
  9. <body>
  10.     <h1>Hello, World!</h1>
  11. </body>
  12. </html>

Создайте контроллер ошибок

По умолчанию зарегистрирован плагин-обработчик ошибок. Этот плагин ожидает, что есть контроллер для обработки ошибок. По умолчанию он предполагает, что в модуле, используемом по умолчанию, имеется контроллер ErrorController с методом errorAction.

  1. class ErrorController extends Zend_Controller_Action
  2. {
  3.     public function errorAction()
  4.     {
  5.     }
  6. }

Согласно уже обсуждаемой выше структуре директорий этот файл будет находиться по пути application/controllers/ErrorController.php. Нужно также создать скрипт вида application/views/scripts/error/error.phtml, пример его содержимого:

  1. <!DOCTYPE html
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html>
  5. <head>
  6.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7.   <title>Error</title>
  8. </head>
  9. <body>
  10.     <h1>An error occurred</h1>
  11.     <p>An error occurred; please try again later.</p>
  12. </body>
  13. </html>

Смотрим сайт!

Теперь, имея свои первые контроллер и вид, вы можете запустить свой броузер и просматривать сайт. Если ваш домен - example.com, то любой из следующих URL-ов будет возвращать ту страницу, которую вы только что создали:

  • http://example.com/

  • http://example.com/index

  • http://example.com/index/index

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


Zend_Controller