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

?>

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