Формы не найдены автозагрузчиком в модуле Zend? - PullRequest
0 голосов
/ 13 августа 2011

Я сыт по горло автозагрузчиком 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, по-видимому, работает с довольно нормальными значениями по умолчанию - действительно ли мне нужно объявлять all пути к формам / моделям / viewhelpers для каждого модуля, учитывая, что они следуют структуре Zend по умолчанию, и в каталог модулей по умолчанию?

Ответы [ 3 ]

6 голосов
/ 13 августа 2011

Я бы удалил весь код автозагрузки модуля из приложения Bootstrap, а затем реализовал пустой загрузочный модуль модуля в application/modules/account/Bootstrap.php:

class Account_Bootstrap extends Zend_Application_Module_Bootstrap
{
}

Затем в application/configs/application.ini добавить следующее:

resources.modules[] = 

Идея заключается в том, что Zend_Application_Module_Bootstrap автоматически регистрирует автозагрузчик ресурсов с набором общих сопоставлений пути / пространства имен, в том числе для форм, которые вы используете.

0 голосов
/ 13 августа 2011

Если это копия / вставка из вашей реальной конфигурации, то у вас есть опечатка в 'modules/acount'

'basePath' => APPLICATION_PATH . 'modules/acount',

В зависимости от версии ZF вам даже не нужен автозагрузчик в начальной загрузке. Вы можете удалить это. Следующее в вашем ini делает то же самое.

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
0 голосов
/ 13 августа 2011

In Bootstrap.php

'basePath' => APPLICATION_PATH . 'modules/acount'

Должно быть:

'basePath' => APPLICATION_PATH . 'modules/account'

Все остальное выглядит хорошо

...