Введение в Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Ttranslation 27.4% Update 2010-11-28 - Revision 23238 - Version ZF 1.11.x

    Глава 24. Zend_Controller

    Содержание

    24.1. Zend_Controller - Быстрый старт
    24.1.1. Введение
    24.1.2. Быстрый старт
    24.1.2.1. Создайте файловую структуру
    24.1.2.2. Установите корневую директорию для документов
    24.1.2.3. Создайте свои правила перезаписи
    24.1.2.4. Создайте файл загрузки
    24.1.2.5. Создайте свой контроллер действий, используемый по умолчанию
    24.1.2.6. Создайте скрипт вида
    24.1.2.7. Создайте контроллер ошибок
    24.1.2.8. Смотрим сайт!
    24.2. Основы Zend_Controller
    24.3. Фронт-контроллер
    24.3.1. Обзор
    24.3.2. Ключевые методы
    24.3.2.1. getInstance()
    24.3.2.2. setControllerDirectory() и addControllerDirectory()
    24.3.2.3. addModuleDirectory() и getModuleDirectory()
    24.3.2.4. dispatch()
    24.3.2.5. run()
    24.3.3. Методы-аксессоры для конфигурирования
    24.3.4. Параметры фронт-контроллера
    24.3.5. Расширение фронт-контроллера
    24.4. Объект запроса
    24.4.1. Введение
    24.4.2. HTTP-запросы
    24.4.2.1. Доступ к данным запроса
    24.4.2.2. Базовый URL и поддиректории
    24.4.2.3. Определение HTTP-метода запроса
    24.4.2.4. Определение запросов AJAX
    24.4.3. Создание подклассов объекта запроса
    24.5. Стандартный маршрутизатор
    24.5.1. Введение
    24.5.2. Использование маршрутизатора
    24.5.3. Базовые операции Rewrite Router
    24.5.4. Маршруты, используемые по умолчанию
    24.5.5. Базовый URL и поддиректории
    24.5.6. Глобальные параметры
    24.5.7. Типы маршрутов
    24.5.7.1. Zend_Controller_Router_Route
    24.5.7.1.1. Значения переменных по умолчанию
    24.5.7.1.2. Требования к переменным
    24.5.7.1.3. Переводимые сегменты
    24.5.7.2. Zend_Controller_Router_Route_Static
    24.5.7.3. Zend_Controller_Router_Route_Regex
    24.5.7.4. Zend_Controller_Router_Route_Hostname
    24.5.7.5. Zend_Controller_Router_Route_Chain
    24.5.7.5.1. Объединение маршрутов через Zend_Config
    24.5.8. Использование Zend_Config вместе с RewriteRouter
    24.5.9. Создание подклассов маршрутизатора
    24.6. Диспетчер
    24.6.1. Обзор
    24.6.2. Создание подклассов диспетчера
    24.7. Контроллеры действий
    24.7.1. Введение
    24.7.2. Инициализация объекта
    24.7.3. Перехватчики Pre- и Post-Dispatch
    24.7.4. Аксессоры
    24.7.5. Интеграция вида
    24.7.5.1. Инициализация вида
    24.7.5.2. Рендеринг видов
    24.7.6. Сервисные методы
    24.7.7. Создание подклассов контроллера действий
    24.8. Помощники действий
    24.8.1. Введение
    24.8.2. Инициализация помощника
    24.8.3. Брокер помощников
    24.8.4. Встроенные помощники действий
    24.8.4.1. ActionStack
    24.8.4.2. AutoComplete
    24.8.4.2.1. Автодополнение c Dojo
    24.8.4.2.2. Автодополнение с Scriptaculous
    24.8.4.3. ContextSwitch и AjaxContext
    24.8.4.3.1. Доступные по умолчанию контексты
    24.8.4.3.2. Создание своего контекста
    24.8.4.3.3. Установка контекстов для действий
    24.8.4.3.4. Инициализация переключения контекста
    24.8.4.3.5. Дополнительный функционал
    24.8.4.3.6. Функционал AjaxContext
    24.8.4.4. FlashMessenger
    24.8.4.4.1. Введение
    24.8.4.4.2. Базовый пример использования
    24.8.4.5. JSON
    24.8.4.6. Redirector
    24.8.4.6.1. Введение
    24.8.4.6.2. Базовые примеры использования
    24.8.4.7. ViewRenderer
    24.8.4.7.1. Введение
    24.8.4.7.2. API
    24.8.4.7.3. Примеры базового использования
    24.8.4.7.4. Примеры продвинутого использования
    24.8.5. Написание собственных помощников
    24.9. Объект ответа
    24.9.1. Использование
    24.9.2. Управление заголовками
    24.9.3. Именованные сегменты
    24.9.4. Проверка на исключения в объекте ответа
    24.9.5. Создание подклассов объекта ответа
    24.10. Плагины
    24.10.1. Введение
    24.10.2. Написание плагинов
    24.10.3. Использование плагинов
    24.10.4. Извлечение и работа с плагинами
    24.10.5. Плагины, включенные в стандартную поставку
    24.10.5.1. ActionStack
    24.10.5.2. Zend_Controller_Plugins_ErrorHandler
    24.10.5.2.1. Использование ErrorHandler в качестве обработчика ошибки 404
    24.10.5.2.2. Управление сгенерированным ранее выводом
    24.10.5.2.3. Примеры использования плагина
    24.10.5.2.4. Пример контроллера ошибок
    24.11. Использование модульной структуры директорий
    24.11.1. Введение
    24.11.2. Определение директорий контроллеров в модулях
    24.11.3. Маршрутизация применительно к модулям
    24.11.4. Модуль или глобальный контроллер по умолчанию
    24.12. Исключения
    24.12.1. Введение
    24.12.2. Обработка исключений
    24.12.3. Исключения в MVC, с которыми вы можете встретиться

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

    24.1.1. Введение

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

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

    24.1.2. Быстрый старт

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

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

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

    application/
        
    controllers/
            
    IndexController.php
        models
    /
        
    views/
            
    scripts/
                
    index/
                    
    index.phtml
            helpers
    /
            
    filters/
    html/
        .
    htaccess
        index
    .php

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

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

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

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

    RewriteEngine On
    RewriteCond 
    %{REQUEST_FILENAME} -[OR]
    RewriteCond %{REQUEST_FILENAME} -[OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule 
    ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    [Замечание] Узнайте больше о mod_rewrite

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

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

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
         <system.webServer>
             <rewrite>
                 <rules>
                     <rule name="Imported Rule 1" stopProcessing="true">
                         <match url="^.*$" />
                         <conditions logicalGrouping="MatchAny">
                             <add input="{REQUEST_FILENAME}"
                                 matchType="IsFile" pattern=""
                                 ignoreCase="false" />
                             <add input="{REQUEST_FILENAME}"
                                 matchType="IsDirectory"
                                 pattern="" ignoreCase="false" />
                         </conditions>
                         <action type="None" />
                     </rule>
                     <rule name="Imported Rule 2" stopProcessing="true">
                         <match url="^.*$" />
                         <action type="Rewrite" url="index.php" />
                     </rule>
                 </rules>
             </rewrite>
         </system.webServer>
    </configuration>

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

    [Замечание] Замечание

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

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

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

    Zend_Controller_Front::run('/path/to/app/controllers');

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

    24.1.2.5. Создайте свой контроллер действий, используемый по умолчанию

    До того, как начать обсуждение контроллеров действий, нужно сначала понять, как обрабатываются запросы в 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.

    24.1.2.6. Создайте скрипт вида

    Как было упомянуто в предыдущем разделе, скрипты вида находятся в 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>HelloWorld!</h1>
    </
    body>
    </
    html>

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

    По умолчанию зарегистрирован плагин-обработчик ошибок. Этот плагин ожидает, что есть контроллер для обработки ошибок. По умолчанию он предполагает, что в модуле, используемом по умолчанию, имеется контроллер 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 occurredplease try again later.</p>
    </
    body>
    </
    html>

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

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

    • http://example.com/

    • http://example.com/index

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

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

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...