Расположение и автозагрузка моделей Zend Framework - PullRequest
3 голосов
/ 14 декабря 2010

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

.

Ответы [ 2 ]

0 голосов
/ 19 марта 2011

Попробуйте расширить Zend_Application_Bootstrap_Bootstrap, тогда вы можете попробовать это

$ loader = $ this-> getResourceLoader ();

$ loader-> addResourceType ('books', 'models / books)',' Model_Book ');$ loader-> addResourceType ('актеры', 'модели / актеры', 'Model_Actor');

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

0 голосов
/ 14 декабря 2010

Zend Framework имеет встроенный автозагрузчик. Он работает путем сопоставления имени класса с деревом каталогов, поэтому Application_Model_Actors_Actor будет сопоставлено с

Application\
 Models\
  Actors\
   Actor.php

К сожалению, вы не можете это изменить. Функция, которую вы ищете, это пространство имен , но она поддерживается (и фактически является одной из основных функций) Zend Framework 2, который все еще разрабатывается.

...