zend framework моделирует расположение и автозагрузку моделей
-
09-10-2019 - |
Вопрос
Я начал документировать себя относительно Zend Framework, поскольку вскоре начну использовать его в производстве.Все работало нормально, пока я не начал использовать модели и работать с ними :).
Расположение по умолчанию для моделей, основанное на рекомендациях Zend, является application/models/DbTable
, куда будут добавлены все модели.Это местоположение вынуждает меня назвать модель следующим образом Application_Model_DbTable_Actors
.Для меня это очень длинное название модели, и им непросто пользоваться.
Структура каталогов, которую я хочу получить, выглядит примерно так:
application/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
и т.д.
Таким образом, все мои модели будут находиться под models
каталог, но сгруппированные в их собственных каталогах.
Именование для каждого класса должно быть ActorsMapper
или Actor
(Они оба будут расширяться Zend_Db_Table
или Zend_Db_Row
).
Я осознаю тот факт, что в моих контроллерах, если я создаю экземпляр модели, используя что-то вроде $actors = new ActorsMapper()
Я получу Fatal error: Class not found
и именно поэтому я прошу вашей помощи в этом.
Чтобы решить эту проблему, я попытался добавить свой models
каталог к include_path:
первая попытка
добавлено
includePaths.models = APPLICATION_PATH "/models"
в application.ini
но этот даже не добавляет его во включаемый путь
вторая попытка:
явно добавлен путь, используя
set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));
но даже если это добавит этот путь к включенным, ошибка все равно сохранится.
Я видел это название моделей в официальная документация из числа Zend_Db_Table
, но я не смог найти ничего, связанного с их автозагрузкой.
Спасибо вам всем за любые решения.
p.s.версия zend framework - 1.11.1
Решение
Zend Framework имеет сборку в автозагрузке. Он работает с помощью имени класса в дерево каталогов, так Application_Model_Actors_Actor
будет сопоставлен с
Application\
Models\
Actors\
Actor.php
К сожалению, вы не можете изменить это. Функция, которую вы ищете, это пространство имен Но он только поддерживается (и на самом деле является одним из основных функций) Zend Framework 2, которые все еще разрабатываются.
Другие советы
Попробуйте расширить Zend_Application_Bootstrap_Bootstrap, затем вы можете попробовать это
$loader = $this->getResourceLoader();
$loader->addResourceType('книги', 'модели/books', 'Model_Book');$loader->addResourceType('актеры','модели/действующие лица', 'Model_Actor');
Я также пытаюсь реализовать такого рода реализацию в шаблоне наблюдателя.