我有一个小(非常小)的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_"
在您的配置中。
有关自动加载器的更多信息