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',

    ));
}

}

Другие вопросы по тегам