Zend找不到窗体


Zend Unable to locate form

我有一个小(非常小)的zend项目,它涵盖了两个模块,管理模块和前端模块。我还设法在"前部"模块下创建了一个表单,并且能够在前部模块的控制器中使用它。现在,我的问题是,当我在"admin"模块下创建一个表单,并在管理控制器中使用它时,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。

提前谢谢。

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

<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
}

这将由您的应用程序引导程序运行,默认情况下Zend_Application_Module_Bootstrap会设置模块资源自动加载器的实例,从而启用以Admin_开头的资源类。

如果要将表单添加到库中,则需要将其放在Library/admin/form/login.php中(相应地更改路径的大小写),而不是放在module'/modules/admin/Controllers etc'文件夹中。我不确定这是否是一个相关的观点,但我还是提出了。。。

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

您为这些表单声明了名称空间吗?在我模块的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_'
                    )
            ),
    ));

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

autoloaderNamespaces[] = "Admin_"

在您的配置中。

有关自动加载器的更多信息