0

我有一个小的(非常小的)zend 项目,它涵盖了两个模块,管理模块和前端模块。我还设法在“前端”模块下创建了一个表单,并且还能够在前端模块的控制器中使用它。现在,我的问题是,当我在“管理”模块下创建一个表单并在管理控制器中使用它时,php 无法再检测到该类的位置。因此,显示此错误:

Fatal error: Class 'Admin_Form_Login' not found in C:\xampp\htdocs\projects\zend\finder\application\modules\admin\controllers\IndexController.php on line 18

我很困惑,在前面的模块中,它正在工作,但在管理模块上,非常相似的创建和使用方式,它失败了。注意:我使用 zf 工具来创建表单。

这是我的application.ini,也许这可能会有所帮助。

phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

resources.modules[] =

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

resources.view.helperPath.Finder_View_Helper = APPLICATION_PATH "/../library/Finder/View/Helper"

我为此使用 Zend 1.11.12。

提前致谢。

4

4 回答 4

2

我猜你没有模块引导类,因为其他一切看起来都很好。因此,您需要做的就是创建一个文件,application/modules/admin/Bootstrap.php其中包含以下内容:

<?php

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

这将由您的应用程序引导程序运行,并Zend_Application_Module_Bootstrap默认设置模块资源自动加载器的实例,这反过来将启用以 . 开头的资源类Admin_

于 2012-09-06T15:02:03.137 回答
2

如果您要将表单添加到库中,那么您希望它在 library/admin/form/login.php 中(相应地更改路径的大小写) - 而不是在模块 '/modules/Admin/Controllers etc' 文件夹中。我不确定这是否是一个相关点,但我还是做到了......

然后确保使用 application.ini 中的 autoLoadNamespaces 加载模块,并且 Admin 文件夹应该在你的库文件夹中。

于 2012-09-06T14:42:09.377 回答
0

您是否为这些表单声明了命名空间?在我的模块的 Bootstrap.php (/application/modules/admin/Bootstrap.php) 中,我使用以下代码:

    //Loads the autoloader resources

    $moduleName = 'admin';
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
            'basePath' => APPLICATION_PATH ."/modules/".$moduleName."/",
            'namespace' => '',
            'resourceTypes' => array(
                    //Tells the application where to find the forms
                    'form' => array(
                            'path' => 'forms/',
                            'namespace' => ucfirst($moduleName).'_Form_'
                    ),
                    //Tells the application where to find the models
                    'model' => array(
                            'path' => 'models/',
                            'namespace' => ucfirst($moduleName).'_Model_'
                    )
            ),
    ));
于 2012-09-06T14:37:49.227 回答
0

据我所知,您没有将 Admin 命名空间添加到自动加载器。如果您使用的是 Autloader 并且表单位于 include_dir/Admin/Form/Login.php 下,请尝试

autoloaderNamespaces[] = "Admin_"

在你的配置中。

有关自动装载机的更多信息

于 2012-09-06T14:38:15.943 回答