4.4 Personal Filter

Filtrando dados do formulário

Diferente das [[validações|4.1-Validações]] onde você tem a opção de utilizar os métodos do Zend Framework os métodos de filtro para formulários não têm esta opção. O motivo é que ainda não houve interesse em incorporar este tipo filtro ainda.

Por outro lado você ainda tem a opção de criar seus próprios métodos de filtro assim como validações o que te proporciona a possibilidade de levar seus filtros a outro nível também.

Como fazer?

Dentro da sua classe de formulário (vamos usar de ex.: ModuleDefault/Form/Index/Index.php) basta adicionar um método com visibilidade pelo menos protected que recebe no máximo dois parâmetros sendo o primeiro obrigatório:

1
2
 (string) $value; // OBRIGATÓRIO - O método receberá automaticamente o valor do input neste parâmetro
 (mixed) $options; // Opções que não são obrigatórias.

Este método deve retornar o valor do input já com a aplicação dos filtros desejados.

Exemplo
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// File: ModuleDefault/Form/Index/Index.php
namespace ModuleDefault\Form\Index;

use SuitUp\FormValidator\AbstractFormValidator;

class Index extends AbstractFormValidator {

    protected $data = array(
        'name' => array(
            'validation' => array('notEmpty'),
            'filter' => array('string', 'randConcatNumber', 'randConcatLetter' => 'abc')
        ),
    );

    // Exemplo simples de filtro
    public function randConcatNumber($value) {

        return $value . '_' . ((string) rand(0, 9));
    }

    // Este é um exemplo mais complexo, com opções
    public function randConcatLetter($value, $options = 'ab') {

        // Garante que $options é string
        $options = (string) $options;

        // pega um indice randomico de $options
        $i = rand(0 , strlen($options)) - 1;

        // Retorna $value concatenado da letra randomica encontrada
        return $value . '-' . $options[$i];
    }
}

Extendendo a classe \SuitUp\FormValidator\AbstractFormValidator

Uma das grandes vantagens de utilizar Programação Orientada a Objetos do PHP é o conceito de herança. Não vamos entrar no mérito de explicar o que este conceito significa então na prática o SuitUp foi construído para você criar a sua classe de formulário herdando (extends) à \SuitUp\FormValidator\AbstractFormValidator fazendo com que sua classe tenha todas as características dela sem alterá-la.

Desta maneira, quando você criar em sua classe de formulário um método de filtro ele será visível apenas dentro deste único formulário. Mas se por outro lado você tiver uma classe no "meio do caminho" que herda (extende) à \SuitUp\FormValidator\AbstractFormValidator e todas as suas classes de formulário herdar dela você irá compartilhar os seus métodos de validação com todos seus formulários.

Parece, mas não é complicado!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
\SuitUp\FormValidator\AbstractFormValidator

                          ^
                          |

\ModuleDefault\Form\AbstractFormPersonal extends AbstractFormValidator

                          ^
                          |

\ModuleDefault\Form\Index\IndexForm extends AbstractFormPersonal 
\ModuleDefault\Form\Index\ListForm extends AbstractFormPersonal 
\ModuleDefault\Form\Index\EditForm extends AbstractFormPersonal