Zend Framework: Form_MyForm не найден в бла ... Это проблема BOOTSTRAP? - PullRequest
0 голосов
/ 11 февраля 2012

Я новичок, и получаю эту ошибку:
- Фатальная ошибка: Класс 'Form_UploadBom' не найден в C: \ wamp \ NetBeansProjects \ bomSlave \ application \ controllers \ BomController.php on line 18
Что мне не хватает ??
Что я делаю не так ??

Как и следовало ожидать, строка 18 из BomController.php - это место, где я вызываю экземпляр моей формы.

17.    public function uploadAction()   {
18.       $form = new Form_UploadBom();
19.       $this->view->form = $form;
20.    }

Моя форма находится на // application / forms / uploadbom.phtml

class Form_UploadBom extends Zend_Form {
    public function __construct($option = null) {
        parent::__construct($option);

        $this->setName('bomupload');

        $company = new Zend_Form_Element_Text('co');
        $company->setLabel('Cust Company:')
                ->setRequired(); 

        $contact = new Zend_Form_Element_Text('contact');
        $contact->setLabel('Cust Contact')
                ->setRequired(); 

        $file = new Zend_Form_Element_File('bom');
        $file->setLabel('BOM File (in CSV):')
                ->setRequired(); 

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Uplaod BOM');

        $this->addElements(array(  $company, $contact, $file, $submit  ));
        $this->setMethod('post');
        $this->setAction('');
    }
}

А вот и Автозагрузчик из моего Bootstrap файла

protected function _initAutoLoad(){
    $autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath'  => APPLICATION_PATH,
        'resourceTypes' => array (
            'model' => array(
                'path' => 'models/',
                'namespace' => 'Model_',
                ),
            'form' => array(
                'path' => 'forms/',
                'namespace' => 'Form_',
                )
            )
        )
    );       
    return $autoloader;
}

Опять же, что мне не хватает ??
Что я делаю неправильно ??
пожалуйста не говорите мне, что это просто где-то типа ...
... это просто смущает:)

~ Mo

[[EDIT]]
Что ж, после изменения расширения файла с phtml на php эта ошибка исчезла ... но ... У меня теперь есть ошибка, связанная с помощниками вида.
- Предупреждение: Отсутствует аргумент 1 для Zend_View_Helper_Form :: form () ....
И это уведомление:
- Примечание: * Неопределенная переменная: имя в C: \ wamp \ bin \ php \ ZendFramework \ 1.11.11 \библиотека \ Zend \ View \ Helper \ Form.php на линии 46

Как все это входит в игру ??
[[/ EDIT]]

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Ну, после изменения расширения файла с phtml на php, эта ошибка ушел ... но ... у меня сейчас ошибка по поводу просмотра помощников. - Предупреждение: отсутствует аргумент 1 для Zend_View_Helper_Form :: form () .... И это уведомление: - Примечание: * неопределенная переменная: имя в C: \ wamp \ bin \ php \ ZendFramework \ 1.11.11 \ library \ Zend \ View \ Helper \ Form.php по линии 46

Как все это входит в игру ??

Я заметил несколько проблем, которые могут повлиять на эту проблему.

  1. Zend_Form_Element_File требует, чтобы кодировка формы была:

    $form->setAttrib('enctype', 'multipart/form-data');

  2. Zend_Form_Element_File требуется набор адресатов
    $element->setDestination('/var/www/upload');

  3. ->setRequired() по умолчанию имеет значение False, я уверен, что вам нужно пометить его как true, чтобы сделать элемент обязательным. $element->setRquired('TRUE');

  4. Обычное использование форм, расширяющих Zend_Form, - это построение формы в методе init(), технически неправильно делать это в __construct(). Просто Zend_Form специально выделяет для этой цели init().

Числа 3 и 4 не должны иметь ничего общего с вашей проблемой viewhelper, скорее всего, 1 и 2.

Также наблюдение ...
Если вы используете текущую версию ZF (1.11), ваш _initAutoload() в вашей начальной загрузке в значительной степени не нужен, поскольку формы и модели имеют маршруты по умолчанию, и вы действительно их не меняете.
Единственное изменение, которое вам нужно будет сделать, чтобы использовать маршруты по умолчанию, это убедиться, что ваше appNamespace является первым словом имени класса. При обычном использовании по умолчанию это «Приложение» ... так что Form_UploadBom() станет Application_Form_UploadBom().
Я понимаю, что вы, возможно, сделали это полностью информированно и нарочно, а не просто следовали какой-то устаревшей книге или руководство. Если это так ... код на:)

1 голос
/ 11 февраля 2012

Zend_Application_Module_Autoloader заменяет _ на /, чтобы найти форму Form_UploadBom по пути application/forms/UploadBom.php.

Измените имя файла вашей формы на

/application/forms/UploadBom.php

Расширение файла .phtml используется только для просмотра связанных вещей.

...