Zend framework Zend Framework模块化应用程序,can';t为每个模块加载模型,自动加载模型?
有没有办法为每个模块建立模型?我有3个模块,一个是“联系人”模块。 我在modules/contacts/models/Codes.php中为它创建了一个模型 编码控制器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
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
{
}