非常に単純なフォームを作成しようとしていて、フォーム自体に検証を追加したいと考えています。フォームに追加する場合、数百万行のコードは必要なく、約 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()) {
....
}
何か案は?