Отображение формы с помощью Zend

#php #forms #zend-framework

#php #формы #zend-framework

Вопрос:

Мне нужен простой способ отображения этой формы. Причина, по которой я делаю это таким образом, заключается в том, чтобы увидеть, как вещи могут быть переданы с одного контроллера на другой контроллер и отображать эти вещи. Я изучаю Zend прямо сейчас, но это было довольно неприятно. Это материал из руководства по zend. Я хочу, чтобы IndexController перенаправлял на гостевую книгу и гостевую книгу, чтобы создать форму и перейти к просмотру.

Это моя структура папок

 test
    -Form
        Guestbook.php
    -Model
    -controllers
        GuestbookController.php
        IndexController.php
    -externals
    -Settings
    -views
        -scripts
            -guestbook
                script.tpl
                sign.tpl
            -index
                index.tpl
    Bootstrap.php
  

Guestbook.php

    <?php

class Test_Form_Guestbook extends Zend_Form{   

    public function init(){

    $this->setMethod('post');

    $this->addElement('text','email',array(
        'label'     => 'Your Email address: ',
        'required'      => true,
        'filters'       => array('StringTrim'),
        'validators'    => array('EmailAddress',)
    ));

    $this->addElement('text','comment',array(
        'label'     => 'Leave a Comment: ',
        'required'      => true,
        'filters'       => array('StringTrim'),
        'validators'    =>  array(
                array('validator' => 'StringLength', 'options' => array(0, 20))
                )
        ));

    $this->addElement('hash','csrf',array('ignore'=>true,));      
    }   
}

?>
  

sign.tpl

 <?php
$this->form->setAction($this->url());
echo $this->form;
?>
  

IndexController.php

 class Test_IndexController extends Core_Controller_Action_Standard
{
  public function indexAction()
  {
          $this->_helper->redirector('sign', 'guestbook');

  }

}
  

GuestbookController.php

 class Test_GuestbookController extends Zend_Controller_Action{

    public function signAction(){


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

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

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

}
  

Трассировка стека

  exception 'Zend_View_Exception' with message 'script '.tpl' not found in path (C:xampphtdocsapplicationmodulesCorelayoutsscripts;C:xampphtdocsapplicationmodulesTestviewsscripts;C:xampphtdocs)' in C:xampphtdocsapplicationlibrariesZendViewAbstract.php:928
Stack trace:
0 C:xampphtdocsapplicationlibrariesZendViewAbstract.php(831): Zend_View_Abstract->_script('.tpl')
1 C:xampphtdocsapplicationlibrariesZendLayout.php(793): Zend_View_Abstract->render('.tpl')
2 C:xampphtdocsapplicationlibrariesZendLayoutControllerPluginLayout.php(142): Zend_Layout->render()
3 C:xampphtdocsapplicationlibrariesZendControllerPluginBroker.php(331): Zend_Layout_Controller_Plugin_Layout->postDispatch(Object(Zend_Controller_Request_Http))
4 C:xampphtdocsapplicationlibrariesZendControllerFront.php(957): Zend_Controller_Plugin_Broker->postDispatch(Object(Zend_Controller_Request_Http))
5 C:xampphtdocsapplicationmodulesCoreBootstrap.php(75): Zend_Controller_Front->dispatch()
6 C:xampphtdocsapplicationlibrariesEngineApplication.php(99): Core_Bootstrap->run()
7 C:xampphtdocsapplicationindex.php(177): Engine_Application->run()
8 C:xampphtdocsindex.php(24): include('C:xampphtdocs...')
9 {main}
  

Комментарии:

1. хм, вы уверены, что stacktrace завершен?

2. Добавлена остальная часть трассировки стека

3. Трассировка стека показывает, что был перенаправлен основной модуль (не тестовый модуль), а искомый сценарий просмотра — script.tpl, что предполагает, что имя действия — ScriptAction в базовом контроллере.

4. @jah согласился, это определенно в основном модуле. Также обратите внимание, что, похоже, он ищет ‘script .tpl’ с пробелом после ipt .

5. Я не знаю, почему он ищет ‘script.tpl’. Я новичок в этом, должен ли я проверить некоторые настройки здесь или это проблема с моим кодом? Спасибо за помощь