Система Zend_Controller
построена с расчетом на
расширение посредством либо создания подклассов от существующих,
либо написания новых классов, которые реализуют интерфейсы
Zend_Controller_Router_Interface
и
Zend_Controller_Dispatcher_Interface
.
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
. Это полезно для разработки, но в
производственной версии вместо этого должны быть написаны
правила перезаписи, исключающие директории.
После настройки файла .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, должен подойти любой веб-сервер с возможностью перенаправления. |
Рекомендуется, чтобы сайты, построенные с Zend Framework, использовали общую структуру каталогов. Несмотря на то, что это возможно не во всех случаях, это возможно для многих или, возможно, большинства случаев. Следование данной структуре сделает ваш код более легким для понимания теми, кто знаком с соглашениями Zend Framework.
Предлагаемая структура каталогов состоит из каталогов библиотек (от Zend и откуда-либо еще) и каталогов приложений.
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
Замечание | |
---|---|
Этот раздел еще не завершен. Он на стадии интенсивной разработки и подвержен изменениям. |
Любой сайт должен определять контроллер с именем
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('/'); } } ?>
Замечание | |
---|---|
Этот раздел еще не завершен. Он на стадии интенсивной разработки и подвержен изменениям. |