Zend Framework - форма не рендеринг - PullRequest
1 голос
/ 15 августа 2011

Я только начинаю использовать Zend Framework и следил за документацией по быстрому запуску для последней версии (1.11.10). Все шло просто отлично, но когда я поместил код формы и запустил приложение, форма не отображалась. Мой код в точности как http://framework.zend.com/manual/en/learning.quickstart.create-form.html

На вид, я могу просто сбросить форму с var_dump($this->form); Я пробовал echo $this->form(), echo $this->form->render(), но ничего не появилось ... Что бы это могло быть?

Ответы [ 4 ]

2 голосов
/ 18 ноября 2012

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

 $element->setDecorators(array(
            array('ViewScript',
                array(
                    'viewScript' => 'directory/_input.phtml'
                )
            )
        ));

Файл _input.phtml должен находиться в нужной папке для этого контроллера.В противном случае Zend не сможет найти шаблон для ввода и не сможет успешно отобразить ваш элемент, и ничего не отобразит.

1 голос
/ 15 августа 2011

Хорошо, так что я попробовал ваш код, и он работал для меня без проблем. Здесь есть все:

Контроллер </p> <pre><code><?php class IndexController extends Zend_Controller_Action { public function myTestAction() { $form = new Form_Guestbook(); // ... processing logics if($this->getRequest()->isPost()) { if($form->isValid($this->getRequest()->getPost())) { var_dump($form->getValues()); } } $this->view->assign('form', $form); } }

Форма </p> <pre><code> <?php class Form_Guestbook extends Zend_Form { public function init() { // Set the method for the display form to POST $this->setMethod('post'); // Add an email element $this->createElement('text', 'email', array( 'label' => 'Your email address:', 'required' => true, 'filters' => array('StringTrim'), 'validators' => array( 'EmailAddress', ) )); // Add the comment element $this->addElement('textarea', 'comment', array( 'label' => 'Please Comment:', 'required' => true, 'validators' => array( array('validator' => 'StringLength', 'options' => array(0, 20)) ) )); // Add a captcha $this->addElement('captcha', 'captcha', array( 'label' => 'Please enter the 5 letters displayed below:', 'required' => true, 'captcha' => array( 'captcha' => 'Figlet', 'wordLen' => 5, 'timeout' => 300 ) )); // Add the submit button $this->addElement('submit', 'submit', array( 'ignore' => true, 'label' => 'Sign Guestbook', )); // And finally add some CSRF protection $this->addElement('hash', 'csrf', array( 'ignore' => true, )); } } ?>

Посмотреть </p> <pre><code><?php echo $this->form->render(); ?>

можно увидеть на: http://yaconiello.com/index/my-test

Если это не работает для вас, возможно, у вас ошибка конфигурации.

1 голос
/ 15 августа 2011

Убедитесь, что вы передаете форму представлению из контроллера.

В вашем обработчике действий:

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

По вашему мнению:

echo $this->form;

Я подозревал, что это было причиной вашей проблемы, потому что Zend Framework не жалуется, если вы пытаетесь отобразить параметр, который не существует.(т.е. echo $this->some_fake_parameter ничего не сделает)

0 голосов
/ 12 января 2014

У меня была такая проблема (точно такая же форма, так как это пример затмения)
Моя проблема была из-за недопонимания. Так как я думал, что у меня есть прямой доступ к скрипту вида. Я ввел в браузере что-то вроде: имя хоста / приложение / вид / скрипт / что-то.php
Но в Zend все доступы должны быть через общую папку. Вы должны получить доступ к представлению, как это: имя хоста / имя_приложения / public / guestbook
надеюсь, что это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...