Я пытаюсь создать ОЧЕНЬ простую форму и хочу добавить валидацию в самой форме. Нет необходимости в миллионах строк кода при добавлении его в форму всего около 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.-]+\.[AZ]{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()) { .... }
Есть идеи?
Определения проверки и фильтрации не являются частью самой Формы. См. http://framework.zend.com/manual/2.0/ru/user-guide/forms-and-actions.html.
Попробуйте это, передайте данные $ _POST.
if($form->isValid($_POST)) { // success! } else { // failure! }