Zend 2 Form Validators
У меня есть некоторые валидаторы, настроенные в форме Zend 2, но isValid всегда возвращает true, игнорируя их. Выгрузка всего объекта формы, не похоже, что валидаторы даже присоединены, вот код формы:
namespace UserManagement\Form;
use Zend\Form\Form;
class SearchUserForm extends Form
{
public function __construct($name = null)
{
// we want to ignore the name passed
parent::__construct('SearchUser');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'search',
'attributes' => array(
'type' => 'text',
'required' => true,
),
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 100,
),
)
),
));
Затем в контроллере я проверяю, действительно ли это:
if( $this->getRequest()->isPost() )
{
$searchForm->setData( $this->params()->fromPost() );
if( $searchForm->isValid() )
{
echo "yep";exit;
}
else
{
echo "nope";exit;
}
Всегда выдает 'yep', несмотря на длину строки в 1 символ. Я на самом деле получил это работает, но поместив валидаторы в отдельный класс фильтра и прикрепив его вместо формы - но мой вопрос, это должно работать?
1 ответ
Решение
Нет, я не думаю, что то, что вы делаете, сработает, так как вы говорите, что можете использовать отдельный входной фильтр. Вы также можете использовать InputFilterProviderInterface в форме, как показано ниже
<?php
namespace Test\Form;
use Zend\Form\Element;
use Zend\Form\Form;
use Zend\InputFilter\InputFilterProviderInterface;
class TestForm extends Form implements InputFilterProviderInterface
{
/**
* Provide default input rules for this element
*
* Attaches strip tags filter
*
* @return array
*/
public function getInputFilterSpecification()
{
return [
'search' => [
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 100,
),
)
),
]
];
}
public function __construct()
{
$this->add(array(
'name' => 'search',
'type' => 'Text',
));
}
}