Zend framework Zend Framework模块化应用程序,can';t为每个模块加载模型,自动加载模型?

Zend framework Zend Framework模块化应用程序,can';t为每个模块加载模型,自动加载模型?,zend-framework,model,module,Zend Framework,Model,Module,有没有办法为每个模块建立模型?我有3个模块,一个是“联系人”模块。 我在modules/contacts/models/Codes.php中为它创建了一个模型 编码控制器 class Contacts_CodesController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ $this->view

有没有办法为每个模块建立模型?我有3个模块,一个是“联系人”模块。 我在modules/contacts/models/Codes.php中为它创建了一个模型 编码控制器

class Contacts_CodesController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    $this->view->messages = $this->_helper->flashMessenger->getMessages();  

    }

    public function indexAction()
    {

    $codesTable = new Contacts_Model_Codes();

    }
代码型号:

class Contacts_Model_Codes extends Zend_Db_Table
{
    protected $_name = 'codes';
}
我得到的错误: 致命错误:在第26行的/Applications/MAMP/htdocs/zf_site/application/modules/Contacts/controllers/CodesController.php中找不到类“Contacts_Model_code”


谢谢

您必须向自动加载程序注册“联系人”名称空间。您可以为此使用Zend_应用程序_模块_自动加载器

$autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Contacts_',
        'basePath'  => dirname(__FILE__) . '/modules/cotacts',
    ));
这将为您提供的basePath内的模块创建以下映射

api/         => Api
forms/       => Form
models/      => Model
    DbTable/ => Model_DbTable
plugins/     => Plugin
如果您使用Zend_应用程序来提升您的应用程序及其模块,您不应该需要它,因为文档中说:

在Zend_应用程序中使用模块引导时,默认情况下会为每个离散模块创建Zend_应用程序_模块_Autoloader的实例,从而允许您自动加载模块资源

我使用的是1.9版。 这是我引导的一部分:

protected function _initAutoload() {
    $modelLoader = new Zend_Application_Module_Autoloader(array(
                  'namespace' => '',
                   'basePath' => APPLICATION_PATH.'/modules/default')

        );
}

    protected function _initAutoloaders()
    {
        $this->getApplication()->setAutoloaderNamespaces(array('Eric_'));
        return $this;
    }

    protected function _initPlugins()
    {
        $this->bootstrap('autoloaders');
        $this->bootstrap('frontController');

        // register the plugin for setting layouts per module
        $plugin = new Eric_Plugin_Modularlayout();
        $this->frontController->registerPlugin($plugin);
            return $modelLoader;
    }
插件Eric_插件模块布局为每个模块设置正确的布局

我有3个模块:默认,ez,联系人。
有趣的是,在联系人操作中,我可以调用ez/models目录中的模型。没有问题。

我发现了问题。我忘了在联系人模块中放入引导文件。 现在一切正常,我可以让我的模块使用它们自己的模型

class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap
{

}


到您的配置ini

我想我已经找到了解决方案!:) 在application.ini文件中添加下一个资源时会出现问题

resources.frontController.defaultModule = "Default"
你也可以使用一些参数。我认为这是一个错误

实现模块的正确方法是:

1-使用zf工具创建所需的模块和“默认值””模块

2-在aplication.ini中,用

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
使用已知的

resources.modules = ""
并设置:

resources.frontController.params.prefixDefaultModule = ""
这很重要,因为zf工具将其设置为“1”。这是错误。:)

记住不要把默认模块放在什么地方

3-为每个模块创建引导文件并放置:

如果我的模块为“Evacol”:

<?php
class Evacol_Bootstrap extends Zend_Application_Module_Bootstrap
{
}

这仅适用于ZF 1.8,在此版本中添加了模块自动加载程序,Zend_应用程序使用它来引导模块。在旧版本中,您需要使用Zend_应用程序_资源_模块,还需要向您的应用程序添加“resources.modules[]=”。iniThanks,这对我很有帮助。我想知道为什么“zf创建模块x”没有处理好这两件事。有没有你不想要的情况?
<?php
class Evacol_Bootstrap extends Zend_Application_Module_Bootstrap
{
}