Php 自动加载Zend中每个模块的表单和模型?

Php 自动加载Zend中每个模块的表单和模型?,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,如何自动加载每个模块的每个表单和模型?考虑以下文件结构: application/ modules/ foo/ forms/ Register.php models/ Account.php Bootstrap.php bar/ forms/ Publish.php

如何自动加载每个模块的每个表单和模型?考虑以下文件结构:

application/
    modules/
        foo/
            forms/
                Register.php
            models/
                Account.php
        Bootstrap.php
        bar/
            forms/
                Publish.php
            models/
                Article.php
        Bootstrap.php
    Bootstrap.php
例如,在foo/Bootstrap.php中,您有以下(非功能性)代码:

基本问题:如何修改引导程序,使其能够从Foo模块加载每个表单和模型

额外问题:是否可能有一个全局自动加载器,从每个模块加载表单和模型?如果是,怎么做

编辑(关于该问题的最常见问题):

  • 类使用默认的Zend命名约定。例如
    Bar\u Model\u Article
    Bar\u Model\u Mapper\u Article
    Bar\u Model\u DbTable\u Article
    Bar\u Form\u Publish
    。。。(并被放置在各自的文件夹中。)

  • 不只是一个模块没有加载它的类,而是所有的类

  • 当使用具有多个模型、映射器、数据库表和表单的纯无模块应用程序时,使用Zend autoloader自动加载类不会出现问题

修理 正如@Tim Fountain提到的,模块引导没有运行,这意味着没有发生任何烘焙到Zend中的自动加载。最终,我找到了我的问题所在。我必须从配置中删除以下行:

bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

同意,全局引导将不再工作;但这比模块引导不起作用要好得多。如果有人知道如何保持全局引导,请随时发表评论。希望这能对其他有类似问题的人有所帮助。

模块引导类自动设置模块自动加载程序,因此您可以删除示例_initAutoload()函数,只留下一个空类,它应该可以正常工作。见:

编辑:听起来您的模块引导没有运行。这不是一个罕见的问题,因为它的组合方式可能有点混乱。验证这一点的最快方法是向其中一个方法添加一个init方法,并带有一个echo和一个exit,然后看看它是否得到了输出

模块引导由Zend应用程序中的“模块”资源拉入并运行。您需要以某种方式触发此资源,因为ZF不会四处寻找模块引导,以防它们出现。最常用的方法是在application.ini中包含这一行:

resources.modules[] = ""
appnamespace = "Foo"

或者,您可以从主引导文件手动设置资源。

我也一直都是这样。但是自从1.10(wild guess)发布以来,您可以删除该引导代码,只需在application.ini中添加以下行:

resources.modules[] = ""
appnamespace = "Foo"

我个人把我的空着。

你为什么需要这个?您可以使用RecursiveDirectoryIterator()递归遍历所有模块目录并加载所有文件。@Zyava我宁愿用正确的方法,而不是简单的方法。Zend优化了类加载,这对站点和开发人员来说总是一个加号。无论如何,谢谢你的链接,我会看一看。我遵循正确的结构,但它不起作用。当使用@Tjorriemorrie的答案提供的设置时,它仅适用于应用程序/模型*(因此不适用于模块)。您一定做了其他错误的事情,因为这实际上是实现这一点的正确方法。您能给出一个类名示例吗?例如,上面示例中的帐户模型应命名为Foo_model_account-这与您拥有的匹配吗?@John Cartwright我就是这么想的,但目前,一切都符合命名约定。尝试所有答案/评论。但是没有用@Tim Fountain是的,这完全符合它(我反复检查的第一件事是惯例)。我将编辑我的问题以反映评论。保持主引导不应该有任何问题。我已经使用你的结构创建了一个裸体应用程序,其中包括工作模块自动加载和主引导。您可以在这里抓取它(只需将ZF放入library文件夹即可)。希望这能给你一些线索。这对我来说适用于全局应用程序/模型*,但它不会加载任何特定于模块的模型。@lefke123好的,添加
resources.frontController.moduleDirectory=application”/modules“
resources.module[]=”
我已经有这些行了,这就是为什么这个问题如此持续的原因。无论如何谢谢你!