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