Zend模块中自动加载器找不到的表单?

时间:2011-08-12 22:32:51

标签: forms zend-framework module zend-autoloader

我已经厌倦了Zend的自动加载器。

我正在尝试从模块结构中的EditPassword内加载PasswordController,如下所示。

project structure

的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结构,并且在默认的模块目录?

3 个答案:

答案 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"