2010-09-30 2 views
0

Я попытался создания ZEND сайт со следующей структурой каталогов:Проблемы получения Zend Form работать

application 
    -configs 
    -forms 
    -modules 
    -admin 
    -default 
     -controllers 
      -IndexController.php 
     -forms 
      -Testform.php 
     -layouts 
     -modules 
     -views 

Тогда в моем IndexController.php я следующее

общественная функция contactMeAction() {

$request = $this->getRequest(); 
    $form = new Form_Testform(); 

    if ($this->getRequest()->isPost()) { 
     if ($form->isValid($request->getPost())) { 

// процесс материал

  return $this->_helper->redirector('index'); 
     } 
    } 

    $this->view->form = $form; 

}

в файле Testform.php я имею

класс Form_Testform расширяет Zend_Form { общественная функция Init() { ...... и т.д.

Но я» m, получив следующую ошибку:

Неустранимая ошибка: Class 'Form_Testform' не найдена в /home/websites/test.local/public_html/prototype/application/modules/default/controllers/Ind exController.php на линии 22

Call Stack: 0,0004 325228 1. {Основные}() /home/websites/test.local/public_html/prototype/public/index.php:0 0,1742 5351472 2. Zend_Application- > run() /home/websites/test.local/public_html/prototype/public/index.php:28 0.1742 5351472 3. Zend_Application_Bootstrap_Bootstrap-> run() /opt/ZendFramework-1.10.7/library/Zend/Application. php: 366 0.1745 5351708 4. Zend_Controller_Front-> dispatch() /opt/ZendFramework-1.10.7/library/Zend/Application/Bootstrap/Bootstrap.php:97 0.1872 5707240 5. Zend_Controller_Dispatcher_Standard-> dispatch()/opt/ZendFramework-1.10.7/library/Zend/Controller/Front.php: 954 0.2026 6016200 6. Zend_Controller_Action-> dispatch()/o pt/ZendFramework-1.10.7/library/Zend/Controller/Dispatcher/Standard.php: 295 0.2029 6020692 7. IndexController-> contactMeAction() /opt/ZendFramework-1.10.7/library/Zend/Controller/Action.php : 513

Куда я иду не так?

ответ

1

В основном ZF не находит форму, в которой он ожидает. Я думаю, вам нужно иметь форму в application/forms, а не в application/modules/default/forms, как вы.

Тогда есть как:

Application_Form_Testform extends Zend_Form

вместо

Form_Testform extends Zend_Form

--- EDIT ---

Так в application/forms у вас есть файл Testform.php Это файл выглядит так:

class Application_Form_Testform extends Zend_Form { 
// form code 
} 

В вашем контроллере у вас есть (обратите внимание на именование действия ...contactmeAction, не contactMeAction):

public function contactmeAction { 
    $form = new Application_Form_Testform(); 
    $this->view->form = $form; 
} 

Тогда в ваш взгляд contactme.phtml:

echo $this->form; 

Это должно работать. Если это не так, я проверю орфографию, заглавную букву в имени вашего действия и убедитесь, что все идет по правильному пути.

+0

Я пробовал, но это не сработало. – Paul

+0

См. Мое редактирование. Это должно исправить это (обратите внимание на случай имени вашего действия). – Stuart

+0

Я получаю Неустранимая ошибка: Class 'Application_Form_Testform' не найден, есть ли способ отображать на экране, где он пытается выглядеть? – Paul

0

Это вопрос о получении следующих вещей все выровненные/последователен:

  1. разделяет пространства имен
  2. именованию классов
  3. местоположение файла класса

Если вы хотите поставить свою форму в папке application/modules/default/forms, затем назовите класс Default_Form_Testform.

+0

Поместить его в эту папку и переименовать его для меня не удалось, к сожалению – Paul

+0

Вы объявляете/устанавливаете другое пространство имен в 1. 'configs/application.ini' или 2.' Bootstrap :: _ initXXX() 'метод ? –

0

Проверить имена/пространства имен, как говорит gaoshan88 (должно быть "класс Application_Form_Testform расширяет Zend_Form" и "$ формы = новый Application_Form_Testform()";)

Убедитесь, что ваше приложение/конфига/application.ini содержит следующие строки:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.frontController.defaultModule = "default" 
resources.modules[] = "" 

Наконец, создайте пустой файл Bootstrap.php и поместите его в каталог application/modules/default /.