Zend 2.2,我正在构建表单并按工厂输入过滤器,验证正在进行,但没有显示?

时间:2014-02-07 09:29:22

标签: php zend-framework

Zend快速入门指南:

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

意味着表单工厂可以通过将过滤器添加到配置数组来自动附加过滤器,基本测试表明正在进行验证,但没有任何内容传递回视图(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(); ?>

2 个答案:

答案 0 :(得分:0)

这是一个快速的 - 我不倾向于使用$this->formRow(),但我认为你将添加<?php echo $this->formElementErrors($elementInstance); ?> 进入你的标记

答案 1 :(得分:0)

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

验证表单需要三个步骤。首先,表单必须附加一个输入过滤器。其次,您必须将数据注入到表单中验证。第三,验证表单。 如果无效,您可以检索错误消息(如果有)。

我错误地认为验证会自动将反馈附加到表单。如果需要,下面的代码会附加错误消息。

感谢所有感兴趣的SO用户。

if ($form->isValid()) {

    $validatedData = $form->getData();

    // Do something useful

} else {

    $messages = $form->getMessages();

}