Programmer's Reference Guide

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, то читайте далее.

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

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

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

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


Zend_Controller
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual