Модули Zend Framework не могут найти / загрузить модели - PullRequest
2 голосов
/ 30 марта 2010

По какой-то расстраивающей причине я настроил несколько модулей, которые, казалось, работали нормально, Однако я не могу загрузить модели модулей. Если я перевожу Модели по умолчанию, они загружаются, но я просто не могу заставить Framework найти их локально ..

Пример:

Каталог моих модулей:

приложение \ модули \ книги \ модели \ books.php (книги - моя модель)

class Application_Module_Books_Model_Books extends Zend_Db_Table_Abstract {}

Я тоже пытался ..

Books_Model_Books, Model_Books, books, Modules_ .. вы называете это, я пробовал:)

Мой контроллер находится в модуле "Книги" и является контроллером индекса, и он никогда не смогу найти локальную модель.

Я использую Application.ini, и он настроен следующим образом:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

У меня есть BootStrap в каталоге модулей:

класс Admin_Bootstrap расширяет Zend_Application_Module_Bootstrap { } * * Тысяча двадцать-один

Я на Zend Framework 1.10, а идеи ..?

Ответы [ 4 ]

5 голосов
/ 01 октября 2011

Для меня просто было добавить следующую строку в application.ini

resources.modules [] =

Затем я добавил Bootstrap.php в каталог модулей ('application \ modules \ books \ ')

class Books_Bootstrap extends Zend_Application_Module_Bootstrap {

    protected function _initAutoload()
    {
      $autoloader = new Zend_Application_Module_Autoloader(array(
           'namespace' => 'Books_',
           'basePath' => dirname(__FILE__)
      ));
      return $autoloader;
     }
}    

Переместить модель книг в' application \ modules \ books \ models \ Books.php '

class Books_Model_Books extends Zend_Db_Table_Abstract {...}

Теперь вы сможете загрузить модель в IndexController

$model = new Books_Model_Books();
2 голосов
/ 11 августа 2010

В application.ini добавьте простую строку:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

и в методе _initAutoload () внутри Bootstrap поместите:

$front = $this->bootstrap("frontController")->frontController;
$modules = $front->getControllerDirectory();
$default = $front->getDefaultModule();

foreach (array_keys($modules) as $module) {
    if ($module === $default) {
        continue;
    }

    $moduleloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => $module,
        'basePath'  => $front->getModuleDirectory($module)));
}

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

[name_module]_Model_[name_model]

в вашем случае, как

class Books_Model_Books {
}

и все: D

0 голосов
/ 30 марта 2010

Правильное имя класса будет Books_Model_Books, но имя файла этого класса должно быть Books.php (обратите внимание на заглавную 'B').

У вас не должно быть начальной загрузки в каталоге модулей, но вы, вероятно, хотите использовать начальную загрузку для каждого каталога модулей, поэтому вам нужен класс:

class Books_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

at: application / modules / books / Bootstrap.php (снова обратите внимание на заглавную 'B').

Проверьте раздел в модуле автозагрузки ресурсов на http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html для получения дополнительной информации.

0 голосов
/ 30 марта 2010

1 - не стесняйтесь удалять это, потому что оно вам больше не нужно:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

и поместите этот код в свой файл Bootstrap.php [начальная загрузка приложения], а не модуль начальной загрузки

public function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '' , 
'basePath' => dirname(__FILE__) . '/modules/'));
return $autoloader;
}

возвращаясь к конфигурации, вам также нужно добавить

   resources.modules[] = ""    
   resources.frontController.defaultModule = "admin" 

вот мой полный файл конфигурации:

phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.defaultModule = "news"
resources.frontController.prefixDefaultModule = 1
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""
;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
autoloaderNamespaces[] = "xxxxxx"

resources.db.adapter = "Mysqli"
resources.db.isdefaulttableadapter = true
resources.db.params.host = "localhost"
resources.db.params.dbname = "xxxxx"
resources.db.params.username = "root"
resources.db.params.password = "root"
resources.db.params.charset = "utf8"

надеюсь, я ничего не пропустил

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