gpt4 book ai didi

php - 在 Zend 中为每个模块自动加载表单和模型?

转载 作者:可可西里 更新时间:2023-10-31 22:58:59 26 4
gpt4 key购买 nike

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

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 中,您有以下(非功能性)代码:

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;
}
}

基本问题:如何修改 Bootstrap 以使其从 Foo 模块加载每个表单和模型?

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

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

  • 默认的 Zend 命名约定用于类。比如Bar_Model_Article, Bar_Model_Mapper_Article, Bar_Model_DbTable_Article, Bar_Form_Publish, ...(并且都放在各自的文件夹中.)

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

  • 在使用具有多个模型、映射器、数据库表和表单的普通无模块应用程序时,使用 Zend 自动加载器自动加载类没有问题。

修复

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

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

同意,全局 Bootstrap 将不再起作用;但这比让模块 Bootstrap 不起作用要好得多。如果有人知道如何仍然拥有全局 Bootstrap ,请随时发表评论。希望这可以帮助其他有类似问题的人。

最佳答案

模块 Bootstrap 类自动设置模块自动加载器,因此您可以删除示例 _initAutoload() 函数,只留下一个空类,它应该一切正常。请参阅:http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html#zend.loader.autoloader-resource.module

编辑:听起来您的模块 Bootstrap 没有运行。这不是一个不常见的问题,因为它们组合在一起的方式可能有点困惑。验证这一点的最快方法是仅向其中一个添加一个带有回显和退出的 init 方法,然后查看它是否获得输出。

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

resources.modules[] = ""

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

关于php - 在 Zend 中为每个模块自动加载表单和模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5603701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com