Помещение моделей в каталог библиотеки в Zend Framework - PullRequest
3 голосов
/ 22 ноября 2011

Я хочу разместить модели вне директории модуля в Zend Framework. Если быть точным, в папке / library

library/
  models/
    actors/
      ActorsMapper.php
      Actor.php
    books/
      BooksMapper.php
      Book.php

ВМЕСТО

application/
modules/
   models/
    actors/
      ActorsMapper.php
      Actor.php
    books/
      BooksMapper.php
      Book.php

Это сделано для того, чтобы мне не нужно было создавать отдельную модель для каждого создаваемого мной модуля. Какие конфигурации мне придется изменить? Если вам нужна более подробная информация, пожалуйста, спросите.

Спасибо:)

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Если вы хотите использовать одинаковые модели для всех модулей, вы можете поместить их в папку приложения / модели

, и это прекрасно работает, как если бы у вас был веб без модулей.

Но еслиВы хотите иметь модели в библиотеке. Вы можете поместить папку «models» в путь к своей библиотеке и автоматически загрузить ее.

  1. Создать папку «Models» в библиотеке со всеми файлами Table.php.
  2. В configs / application.ini Положите:

    autoloaderNamespaces.models = "Models_"
    

Тогда вы можете использовать пространство имен 'Models_' в своем веб-приложении

В контроллере:

    $model = new Models_Table();

в любом случае, я рекомендую хранить папку модели в пути приложения / models

2 голосов
/ 22 ноября 2011

Первый ответ работает, но я дам вам другой ответ на случай, если вы захотите зарегистрировать автозагрузку в начальной загрузке.

1) поместите папку 'models' в библиотеку со всеми файлами Table.php.

Каждая модель / класс должна иметь:

class Model_Table extends Zend_Db_Table_Abstract{ ... }

2) В bootstrap.php положить:

protected function _initAutoLoad() {
    // Add autoloader empty namespace
    $autoLoader = Zend_Loader_Autoloader::getInstance();
    $resourceLoader = new Zend_Loader_Autoloader_Resource(
            array(
                'basePath'      => APPLICATION_PATH,
                'namespace'     => '',
                'resourceTypes' => array(
                'model'         => array(
                        'path'      => '../library/models/',
                        'namespace' => 'Model_'
                    ),
                ),
            )
    );
    return $resourceLoader;
}

Вот и все.Теперь вы можете использовать свои модели в контроллерах следующим образом:

$model = new Model_Table();
1 голос
/ 22 ноября 2011

Класс загрузки Zend Autoloader, имя которого начинается с префикса, зарегистрированного на нем. Если у вас есть библиотека в пути включения, вы можете просто зарегистрировать «Модели», такие как пространство имен по умолчанию, в автозагрузчике и назвать свой класс, например, Models_Actors_Actor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...