Структура директорий и названия классов в Zend Framework
Хотелось бы поведать свои находки в области наиболее удобной и даже несколько zend-way структуры директорий для проекта.
Глядя на исходники библиотеки ZF, мне хотелось использовать такое же именование классов внутри папки application
. Я выбрал такой путь в котором папка application
содержит в себе все классы, необходимые для работы проекта. Таким образом, у меня в папке application
появились папки plugins
, forms
, models
, controllers
.
Как же правильно сделать так, чтобы все нормально функционировало и в файле Articles.php
был класс Model_Articles
вместо класса Articles
? Это нужно, чтобы избавиться от старого метода автозагрузчика, который запускался следующим образом в файле Bootstrap.php
и подключал все пространства имен (зачастую это совершенно излишне):
protected function _initAutoload()
{
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);
}
В этом случае на помощь нам может прийти следующий метод нашего класса Bootstrap
:
protected function _initAutoload()
{
$loader = Zend_Loader_Autoloader::getInstance();
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH,
));
return $moduleLoader;
}
Таким образом мы создаем модуль автолоадера для загрузки файлов именно нашего приложения, то есть префикс неймспэйса у нас получается пустым и корневая директория – APPLICATION_PATH
. Это позволит создавать классы (см. структуру директорий выше) с именами Model_Ratings
, Model_Articles
. А также уходить вглубь директорий, например положить класс Model_Row_Article
в директорию application/models/Row/Article.php
В стиле ZF? По-моему, вполне :)