7.2. Начало работы
Пред. | Глава 7. Zend_Controller | След.

## 7.2. Начало работы

### 7.2.1. Введение

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

### 7.2.2. Конфигурация сервера

`Zend_Controller` создан для поддержки современных веб-сайтов с "чистыми" URI (с небольшим количеством или полным отсутствием параметров запроса). Предлагаемая конфигурация требует поддержки со стороны веб-сервера в виде перезаписи URI (URI rewriting) для перенаправления всех запросов одному файлу, называемому здесь "`index.php`", который будет просто загружать `Zend_Controller_Front`. На веб-сервере Apache это осуществляется дополнительным модулем, называемом mod_rewrite.

Первым шагом в конфигурировании сервера должна быть успешная установка и активация модуля mod_rewrite. Следующим шагом является размещение в корневом каталоге сайта двух файлов: `.htaccess` и `index.php`. Файл `.htaccess` используется веб-сервером Apache и должен содержать правила mod_rewrite для перенаправления всех запросов к `index.php`. Для целей разработки часто самым простым решением будет написать такие правила mod_rewrite, которые будут перенаправлять все запросы к `index.php`, за исключением определенных расширений файлов. Ниже пример такого файла:

    RewriteEngine on
    RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

В приведенном выше примере все запросы, не содержащие ни одного из указанных расширений, будут переданы `index.php`. Это полезно для разработки, но в производственной версии правила пререзаписи должны быть составлены таким образом, чтобы исключать директории.

| Местонахождение файла загрузки
Файл загрузки должен быть единственным PHP-файлом, хранящимся в корневом каталоге сайта.

Основной набор функциональных возможностей Zend_Controller также поддерживает URL-ы вида `index.php?controller=foo&action=bar`, использующие параметры запроса. Кроме того, другой поставляемый в дистрибутиве маршрутизатор, `Zend_Controller_RewriteRouter`, может работать в различных окружениях, включая те, в которых отсутствует возможность перезаписи запросов. Вы можете использовать Zend_Controller на своем сайте даже если не можете использовать mod_rewrite или его аналог.

### 7.2.3. Файл загрузки

После настройки файла `.htaccess`, создайте новый файл с именем `index.php`. Это файл загрузки. Назначением файла является только загрузка `Zend_Controller_Front`, который в идеале должен быть расположен вне корневого каталога сайта.

| Местонахождение файла загрузки
Файл загрузки должен быть единственным PHP-файлом, хранящимся в корневом каталоге сайта.

Из соображений безопасности Zend крайне не рекомендует хранить какие-либо файлы PHP в каталогах, которые доступны через веб-сервер (те, что находятся в корневом каталоге сайта). Несмотря на то, что это возможно не во всех ситуациях (таких, как разделяемый хостинг), это должно считаться наилучшей практикой и по возможности соблюдаться.

Создайте файл загрузки `index.php` в корневом каталоге сайта для загрузки `Zend_Controller_Front`:

    <?php

    require_once 'Zend/Controller/Front.php';

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

    ?>

Подробнее про `/path/to/your/controllers` см. следующий за этим раздел. Как написано в `README.txt`, каталог с библиотекой Zend Framework должен быть прописан в `include_path`. Если `include_path` не установлен в `php.ini`, можно вызывать функцию `set_include_path()` перед `require_once()` в этом файле.

### 7.2.4. Структура каталогов

Рекомендуется, чтобы сайты, построенные с Zend Framework, использовали общую структуру каталогов. Несмотря на то, что это возможно не во всех случаях, это реализуемо для многих (или даже большинства) случаев. Следование данной структуре сделает ваш код более легким для понимания теми, кто знаком с соглашениями Zend Framework.

Предлагаемая структура каталогов состоит из каталогов библиотек (от Zend и каких-либо других) и каталогов приложений.

    /application
      /models
      /views
      /controllers
    /document_root
      /images
      /styles
      .htaccess
      index.php
    /library
      /Zend

| В стадии разработки
Этот раздел еще не завершен. Он на стадии интенсивной разработки и подвержен изменениям.

### 7.2.5. Контроллер по умолчанию

Каждый сайт должен определять контроллер по умолчанию. Это контроллер, который вступает в действие, когда в URI не определен контроллер, как в этом URI:

    http://framework.zend.com/

В поставляемой конфигурации используемый по умолчанию контроллер должен называться `IndexController` и должен быть определен в файле `IndexController.php`. В коде на него ссылаются как на контроллер 'index'.

Вы можете изменить контроллер по умолчанию до начала диспетчеризации посредством вызова метода `setDefaultController()` объектов `Zend_Controller_Front` или `Zend_Controller_Dispatcher`. При этом соблюдайте внутренние соглашения по именованию. В соотвествии с этими соглашениями на класс `HomeController` (в файле `HomeController.php`) нужно ссылаться как на `home`.

Все контроллеры должны наследовать от класса `Zend_Controller_Action` и размещаться в каталоге контроллеров.

    <?php

    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            echo 'Hello from IndexController';
        }

        public function noRouteAction()
        {
            $this->_redirect('/');
        }
    }

    ?>

Подробнее о контроллере и действии по умолчанию и о написании классов контроллеров будет изложено в следующих разделах.

| В стадии разработки
Этот раздел еще не завершен. Он на стадии интенсивной разработки и подвержен изменениям.

Пред. | Уровень выше | След.
Глава 7. Zend_Controller | Начало | 7.3. Создание подклассов