2

非常に単純なフォームを作成しようとしていて、フォーム自体に検証を追加したいと考えています。フォームに追加する場合、数百万行のコードは必要なく、約 3 行で済みます。

ここに私のフィールドの2つがあります:

$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()ALWAYS は 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()) {
             ....
        }

何か案は?

4

2 に答える 2

2

検証およびフィルタリングの定義は、フォーム自体の一部ではありません。http://framework.zend.com/manual/2.0/en/user-guide/forms-and-actions.htmlを参照してください

于 2013-01-08T09:50:45.510 に答える
0

これを試して、$_POST データを渡します。

 if($form->isValid($_POST)) {
     // success!
  } else {
     // failure!
  }
于 2013-01-08T09:47:41.220 に答える