2014-02-07 1 views
0

Зенд Краткое руководство:Zend 2.2, я строю формы и фильтры ввода на фабрике, проверка происходит, но не отображается?

http://framework.zend.com/manual/2.2/en/modules/zend.form.quick-start.html

Подразумевается, что форма завод может присоединить фильтры автоматически путем добавления их в массив конфигурации, рудиментарным тестирование показывает, что проверка происходит, но ничего не выходит передается обратно в view (formElementErrors или formRow). )

Завод Массив

$this->form = array(
      'hydrator' => 'Zend\Stdlib\Hydrator\ArraySerializable', 
      'elements' => array(
       array(
        'spec' => array(
         'name' => 'name', 
         'options' => array(
          'label' => 'Your name', 
         ), 
         'attributes' => array(
          'type' => 'text' 
         ), 
        ) 
       ), 
       array(
        'spec' => array(
         'type' => 'Zend\Form\Element\Email', 
         'name' => 'email', 
         'options' => array(
          'label' => 'Your email address', 
         ) 
        ), 
       ), 
       array(
        'spec' => array(
         'type' => 'Zend\Form\Element\Csrf', 
         'name' => 'security', 
        ), 
       ), 
       array(
        'spec' => array(
         'name' => 'send', 
         'attributes' => array(
          'type' => 'submit', 
          'value' => 'Submit', 
         ), 
        ), 
       ), 
      ), 
      'input_filter' => array(
       'name' => array(
        'required' => true, 
        'filters' => array(
         array('name' => 'Zend\Filter\StringTrim'), 
        ), 

       ), 
       'email' => array(
        'required' => true, 
        'filters' => array(
         array('name' => 'Zend\Filter\StringTrim'), 
        ), 
        'validators' => array(
         new Validator\EmailAddress(), 
        ), 
       ) 
      ) 
     ); 

Контроллер

namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use Zend\Form\Factory; 

use Application\Form\Login; 

class LoginController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     $factory = new Factory(); 
     $login = new Login(); 

     $form = $factory->createForm($login->form); 

     if ($this->getRequest()->isPost()) 
     { 
      $form->setData($this->getRequest()->getPost()); 

      /* 
      if ($form->isValid()) 
      { 
       die('valid'); 
      } 
      else 
      { 
       die('invalid'); 
      } 
      */ 

     } 

     return(array('form' => $form)); 

    } 

    public function loginAction() 
    { 

     die('login'); 

    } 
} 

Посмотреть

<?php 
    $form = $this -> form; 
    $form -> prepare(); 
    $form -> setAttribute('method', 'post'); 
    $formLabel = $this -> plugin('formLabel'); 
    echo $this -> form() -> openTag($form); 
    ?> 

    <div class="form_element"> 
    <?php echo $this -> formRow($form -> get('name'));?> 
    </div> 

    <div class="form_element"> 
    <?php echo $this -> formRow($form -> get('email')); ?> 
    </div> 

    <?php echo $this->formElement($form -> get('security')); ?> 

    <?php echo $this->formElement($form -> get('send')); ?> 

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

ответ

0

От http://framework.zend.com/manual/2.2/en/modules/zend.form.quick-start.html

"Пользователи * форм требует трех шагов. Во-первых, форма должна иметь прикрепленный входной фильтр. Во-вторых, вы должны ввести данные для подтверждения в форму. В-третьих, вы подтверждаете форму.Если вы не уверены, вы можете получить сообщения об ошибках, если они есть. "

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

Спасибо всем, так что пользователи, которые интересовались.

if ($form->isValid()) { 

    $validatedData = $form->getData(); 

    // Do something useful 

} else { 

    $messages = $form->getMessages(); 

} 
0

Это быстрый один - я не склонен использовать $this->formRow(), но я думаю, что вы 'добавьте <?php echo $this->formElementErrors($elementInstance); ?> в y наша разметка

Смежные вопросы