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

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

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

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

### 4.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`. Это полезно для разработки, но в производственной версии вместо этого должны быть написаны правила перезаписи, исключающие директории.

### 4.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()` в этом файле.

| Замечание
Сейчас мы рассматриваем решения, которые не будут требовать установки mod_rewrite. Мы намереваемся предложить конфигурацию для систем как с поддержкой mod_rewrite, так и без нее. Еще, пожалуйста, обратите внимание на то, что эта система не завязана конкретно на Apache или модуле mod_rewrite, должен подойти любой веб-сервер с возможностью перенаправления.

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

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

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

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

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

### 4.2.5. IndexController

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

    http://framework.zend.com/

Класс `IndexController` должен быть храниться в файле с именем `IndexController.php`, и этот файл должен находиться в каталоге для контроллеров. `IndexController` должен быть подклассом `Zend_Controller_Action`. Ниже приведен пример `IndexController`:

    <?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('/');
        }
    }

    ?>

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

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