zend framework моделирует расположение и автозагрузку моделей

StackOverflow https://stackoverflow.com/questions/4440187

Вопрос

Я начал документировать себя относительно 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');

Я также пытаюсь реализовать такого рода реализацию в шаблоне наблюдателя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top