我已经厌倦了Zend的自动加载器。
我正在尝试从模块结构中的EditPassword
内加载PasswordController
,如下所示。
的application.ini
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.frontController.baseUrl = "/"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
phpSettings.date.timezone = "Europe/London"
bootstrap.php中:
public function init() {
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV);
$baseUrl = $config->baseHttp;
define('BASE_URL', $baseUrl);
}
protected function _initAutoload() {
$autoLoader = Zend_Loader_Autoloader::getInstance();
$autoLoader->registerNamespace('App_');
//
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . 'modules/account',
'resourceTypes' => array(
'form' => array(
'path' => 'forms',
'namespace' => 'Form'))));
$autoLoader->pushAutoloader($moduleLoader);
//
return $autoLoader;
}
我正在控制器中加载表单,如下所示:
$form = new Account_Form_EditPassword();
$this->view->form = $form;
错误本身是:
Fatal error: Class 'Account_Form_EditPassword' not found in
Z:\dat\docs\workspace\metamusic\application\modules\account\controllers\PasswordController.php
on line 7
我做错了什么? Zend中的其他所有内容似乎都运行了相当理智的默认值 - 我是否真的必须为每个模块声明所有表单/模型/ viewhelper的路径,因为它们遵循默认的Zend结构,并且在默认的模块目录?
答案 0 :(得分:6)
我会从应用程序Bootstrap中删除所有模块自动加载代码,然后在application/modules/account/Bootstrap.php
中实现一个空模块引导程序:
class Account_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
然后在application/configs/application.ini
中添加以下内容:
resources.modules[] =
这里的想法是Zend_Application_Module_Bootstrap
自动注册一个资源自动加载器,其中包含一组公共路径/命名空间映射,包括您正在使用的表单映射。
答案 1 :(得分:0)
在 Bootstrap.php
中 'basePath' => APPLICATION_PATH . 'modules/acount'
应该是:
'basePath' => APPLICATION_PATH . 'modules/account'
其他一切看起来都不错
答案 2 :(得分:0)
如果这是您实际配置中的复制/粘贴,那么您在'modules/acount'
'basePath' => APPLICATION_PATH . 'modules/acount',
根据您的ZF版本,您甚至不需要引导程序中的自动加载器。你可以删除它。您的ini中的以下内容也是如此。
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"