Na sequência de posts sobre o Zend Framework já falei sobre os primeiros passos, forms, filters e chegou a vez do Zend Validator.
namespace Application\Validator; use Zend\Validator\AbstractValidator; class FloatVal extends AbstractValidator { const FLOAT = 'float'; protected $messageTemplates = [ self::FLOAT => "'%value%' is not a floating point value", ]; public function isValid($value) { $this->setValue($value); if (! is_float($value)) { $this->error(self::FLOAT); return false; } return true; } }É bem simples, basta estender de AbstractValidator e sobrescrever o método isValid. Ali basta criar a sua regra de validação.
namespace Application\Validator; use Zend\Validator\AbstractValidator; class NameAndLastName extends AbstractValidator { // definindo a chave de erro const INVALID = 'nameAndLastNameInvalid'; // Mapeando os possíveis erros /** * @var array */ protected $messageTemplates = [ self::INVALID => "Please provide your name and last name", ]; /** * @inheritdoc */ public function isValid($value) { // separando a string a partir dos espaços em branco $words = explode(' ', $value); // vefiricando se a string resultou em mais de 1 palavra $valid = count($words) > 1; // caso o resultado seja apenas uma palavra, a validação indica o erro if (!$valid) { $this->error(self::INVALID); return false; } return true; } }
// module/Application/src/Form/ExampleFormFilter $inputFilter->add([ 'name' => 'nome', 'required' => true, 'filters' => [ ['name' => StripTags::class], ['name' => StringTrim::class], ], 'validators' => [ // outros validadores, se necessário [ 'name' => \Application\Validator\NameAndLastName::class ] ], ]);Muito simples, não? Assim que setar os dados na classe de form e solicitada a validação, o nome será verificado se é composto de nome e sobrenome.
$nameAndLastName = new \Application\Validator\NameAndLastName(); $string = 'retorno_false'; $string2 = 'retorno true'; $nameAndLastName->isValid($string); // false $nameAndLastName->isValid($string2); // true
$validator = new \Application\Validator\NameAndLastName(); $string = 'return_false'; var_dump($validator->isValid($string)); print_r($validator->getMessages()); // Saída /* Array ( [nameAndLastNameInvalid] => Please provide your name and last name ) */Isso que é o bonito de se trabalhar com um Framework robusto como o Zend. Você faz as coisas do seu jeito, e sempre reaproveita para os mais diversos casos. Quando você junta tudo, fornece uma boa camada de segurança à sua aplicação. A definição do Form permite que os formulários sejam precisos e a utilização dos filtros permite limpar possíveis dados maliciosos. A validação por fim permite que os dados inputados pelo usuário estejam condizentes com o que você persistirá no banco de dados.