某人如何自动加载每个模块的每个表单和模型?请看下面的文件结构:自动加载Zend中每个模块的表单和模型?
application/
modules/
foo/
forms/
Register.php
models/
Account.php
Bootstrap.php
bar/
forms/
Publish.php
models/
Article.php
Bootstrap.php
Bootstrap.php
而且例如,在富/ bootstrap.php中您有以下(非功能性)代码:
class Foo_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoLoad()
{
$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH . '/modules/foo',
'namespace' => 'Foo',
));
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model');
return $loader;
}
}
基本问题:引导程序如何进行修改,以便它可以从Foo模块加载每个表单和模型?
额外问题:是否有可能有加载从每模块形式和车型全球自动加载磁带机?如果是这样,怎么样?
编辑(有关该问题的最常见的问题):
默认的Zend命名约定被用于类。如
Bar_Model_Article
,Bar_Model_Mapper_Article
,Bar_Model_DbTable_Article
,Bar_Form_Publish
,...(而且被放置在各自的文件夹。)它不只是一个模块没有得到它的类加载,它的所有的人。
使用带有多个模型,映射器,dbtables和表单的普通no-module应用程序时,使用Zend自动加载器自动加载类没有问题。
修复
由于@Tim喷泉提到的模块白手起家都没有运行,这意味着没有自动加载的发生的真实烤到Zend。最终,我发现问题出在我的情况下。我不得不从我的配置中删除以下行:
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
同意,全局bootstrap不再工作了;但比模块引导程序无法正常运行要好得多。如果有人知道如何拥有全球引导,请随时发表评论。希望这可以帮助其他类似问题的人。
你需要什么?您可以使用RecursiveDirectoryIterator(http://php.net/manual/en/class.recursivedireiteiteite.php)递归地遍历所有模块目录并加载所有文件。 – Zyava 2011-04-09 10:37:17
@Zyava我宁愿采用正确的方式,而不是简单的方式。 Zend优化了类加载,这对于网站和开发人员来说总是一个优点。无论如何,感谢您的链接,我会看看它。 – levivanzele 2011-04-09 12:26:42