【问题标题】:Zend Framework 2 - Building a simple form with ValidatorsZend Framework 2 - 使用验证器构建一个简单的表单
【发布时间】:2013-01-08 09:39:59
【问题描述】:

我正在尝试构建一个非常简单的表单,并希望在表单本身中添加验证。无需百万行代码,添加到表单中只需 3 行左右。

这是我的两个领域:

$this->add(array(
        'name' => 'username',
        'attributes' => array(
            'type'  => 'text',
        ),
        'options' => array(
            'label' => 'Name*',
            'required' => true,
        ),
        'filters' => array(
            array('StringTrim')
        ),
    ));
$this->add(array(
        'name' => 'email',
        'attributes' => array(
            'type'  => 'text',
        ),
        'options' => array(
            'label' => 'E-Mail*',
            'required' => true,
        ),
        'validators' => array(
            array('regex', true, array(
                'pattern'   => '/[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i',
                'messages'  =>  'Bitte eine gültige E-Mailadresse angeben'))
        ),
        'filters' => array(
            array('StringTrim')
        ),
    ));

$form->isValid() 总是返回 true。即使该字段为空。我有另一个带有正则表达式验证器的字段,同样的事情...... WTF,Zend?

我的控制器如下所示:

$form = new UserForm();
    $form->setHydrator(new DoctrineEntity($entityManager));

    $request = $this->getRequest();
    if ($request->isPost()) {
        $backenduser = new User();
        $form->bind($user);
        $form->setData($request->getPost());

        if ($form->isValid()) {
             ....
        }

有什么想法吗?

【问题讨论】:

    标签: php forms validation zend-form zend-framework2


    【解决方案1】:

    验证和过滤定义不是表单本身的一部分。见http://framework.zend.com/manual/2.0/en/user-guide/forms-and-actions.html

    【讨论】:

    • 我知道。但我在网上看到了我的代码一百次......为什么它不起作用?我想避免这个界面的东西,因为它对这么小的而且不被重用的表单付出了很多努力!
    • 所以不能以 def 的形式添加验证器?就像在这里说的一样:stackoverflow.com/a/7069700/1331671
    • 那是ZF1,把Validator和form分开!这就是 ZF2 中的做法;)
    • 要明确一点:编写或复制/粘贴大量代码而不是单行代码是 ZF2 中新的更好的方法吗? ;)
    • en.wikipedia.org/wiki/Separation_of_concerns 是同一行代码,只是在另一个地方。
    【解决方案2】:

    试试这个,传递 $_POST 数据。

     if($form->isValid($_POST)) {
         // success!
      } else {
         // failure!
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多