InputFilter
Se inserirmos alguns campos do form no ValidationGroup, então eles serão validados, mas o que será verificado? A solução para essas questões vem do uso do InputFilter.
Como serão as validações de cada campo, como por exemplo, tamanho do dado, se é obrigatório ou não e outros, devem ser reunidos em um InputFilter. E tudo começa com a ideia de nossa classe formulário chamada MyForm implementando a interface InputFilterAwareInterface.
Se isso ocorresse, a classe MyForm deveria implementar o método setInputFilter(InputFilterInterface $inputFilter) e um atributo que referencie o InputFilter, porém a classe Form já possui essa interface implementada, métodos e atributos existentes. Além disso, a classe Form possui segundo e próprio método para trabalharmos com InputFilter chamado setInputFilter(InputFilterInterface $inputFilter).
Um outro detalhe importante é que os InputFilters são criados à partir de uma factory de inputs chamado Zend\InputFilter\Factory. Essa factory possui um método chamado createInputFilter(array) onde passaremos um vetor com nossos filtros.
namespace Application\Form;
use Zend\Form;
class MyForm extends Form {
function __contruct() {
$this->setAttribute(‘method’, ‘post’);
$this->setAttribute(‘id’, ‘my-form’);
//..Add fields with $this->add()
$this->setInputFilter(
new Factory()->createInputFilter(
array(
‘sex’ => array (
‘required’ => true
),
‘name’ => array (
‘allow_empty’ => false
),
)
)
);
$this->setValidationGroup(
array(
‘security’,
‘sex’,
‘name’,
)
);
}
}
|
Após nosso InputFilter pronto, não podemos esquecer de inserir nossos campos no ValidationGroup. Assim, temos a combinação de validações em cada campo e os campos que deverão ser validados.
Repare que a biblioteca do framework já possui alguns validators e estamos utilizado-os em nosso InputFilter, como por exemplo, o required e allow_empty.