我有一个小型(非常小)的zend项目,涵盖了两个模块,即admin和front模块。我还设法在'front'模块下创建了一个表单,并且也能够在前端模块的控制器中使用它。现在,我的问题是,当我在'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。
提前致谢。
答案 0 :(得分:2)
如果要将一个表单添加到库中,那么您需要它在library / admin / form / login.php中(相应地改变路径的情况) - 而不是在模块'/ modules / Admin / Controllers etc.'文件夹中。我不确定这是否是一个相关点,但无论如何我都做到了......
然后确保使用application.ini中的autoLoadNamespaces加载模块,Admin文件夹应位于库文件夹中。
答案 1 :(得分:2)
我猜你没有模块引导类,因为其他一切看起来都很好。所以你需要做的就是在application/modules/admin/Bootstrap.php
创建一个包含以下内容的文件:
<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
这将由您的应用程序引导程序运行,Zend_Application_Module_Bootstrap
默认设置模块资源自动加载器的实例,该实例将依次启用以Admin_
开头的资源类。
答案 2 :(得分: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_'
)
),
));
答案 3 :(得分:0)
从我看到你没有将Admin命名空间添加到自动加载器。 如果您使用的是Autloader,并且表单位于include_dir / Admin / Form / Login.php下,请尝试
autoloaderNamespaces[] = "Admin_"
在你的配置中。