有没有办法为每个模块建立模型?我有3个模块,一个是"联系人"模块.我在模块/ 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_Codes'
谢谢
我发现了这个问题.我忘了在我的联系人模块中放入一个bootstrap文件.现在一切正常,我可以让我的模块使用自己的模型.
class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap { }
我猜我找到了解决方案!:)当您在application.ini文件中添加下一个资源时,这是一个问题
resources.frontController.defaultModule = "Default"
而且你也使用某种参数.我认为这是一个Bug.
实现模块的正确方法是:
1 - 使用zf工具创建所需的模块和" 默认 "模块
2 - 在apllication.ini中告诉ZF模块的位置以及这些模块的控制器所在的位置
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.moduleControllerDirectoryName = "controllers"
使用已知的
resources.modules = ""
并设置:
resources.frontController.params.prefixDefaultModule = ""
这很重要,因为zf工具将其设置为"1".这是错误.:)
请记住,不要把默认模块放在哪里!
3 - 为每个模块创建bootstrap文件并放入:
如果我的模块是'Evacol':
将它保存到/ modules/Evacol /很明显
记下Evacol_ ...和..._ Module_Bootstr ...我的模块的名称延伸正确的类别.不要使用zf工具创建的bootstrap文件的默认值.我做的 :)
不要修改任何一个.这不是必要的.
瞧!相信我.有用!
这是Zend Framework 1.10.8
3> Goran Jurić..:您必须使用自动加载程序注册"Contacts_"命名空间.您可以使用Zend_Application_Module_Autoloader进行此操作.
$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_Application来提升您的应用程序及其模块,那么您不应该需要这个,因为文档说:
当使用带有Zend_Application的模块引导时,默认情况下将为每个离散模块创建Zend_Application_Module_Autoloader的实例,允许您自动加载模块资源.
4> Dave K..:加
resources.modules[] =到你的配置ini