有没有办法让每个模块都有模型?我有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_Codes'
感谢
答案 0 :(得分:18)
我发现了问题。我忘了在我的联系人模块中放入一个bootstrap文件。 现在一切正常,我可以让我的模块使用他们自己的模型。
class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
答案 1 :(得分:6)
我猜我找到了解决方案! :) 在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':
<?php
class Evacol_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
显然将它保存到/ modules / Evacol /
注意 Evacol _ ...和..._ Module_Bootstr ...我的模块名称扩展正确的类别。 不要使用zf工具创建的bootstrap文件的默认值。我做到了:)
不要修改任何人。这不是必要的。
瞧!相信我。它有效!
这是Zend Framework 1.10.8
答案 2 :(得分:5)
您必须使用自动加载程序注册“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的实例,允许您自动加载模块资源。
答案 3 :(得分:5)
添加
resources.modules[] =
到你的配置ini
答案 4 :(得分:2)
我正在使用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_Plugin_Modularlayout为每个模块设置正确的布局。
我有3个模块:默认,ez,联系人。 有趣的是,在一个联系人动作中我可以调用ez / models目录中的模型。没问题。