Se você já leu a minha sequência de posts sobre o Zend Form ou já sabe como trabalhar com forms, deve conhecer o Zend Filter, certo? Hoje mostrarei como criar seus próprios filtros e vinculá-los em seus forms.
namespace Application\Filter; use Zend\Filter\FilterInterface; class MyFilter implements FilterInterface { public function filter($value) { // perform some transformation upon $value to arrive on $valueFiltered return $valueFiltered; } }Bem simples, não? Veja no código acima que tudo o que precisamos fazer é implementar uma interface e pronto! Vamos agora criar nosso filtro pra aplicar máscara em CPF?
namespace Application\Filter; use Zend\Filter\FilterInterface; class CPFMaskFilter implements FilterInterface { /** * @inheritdoc */ public function filter($value) { // removendo qualquer "poluição" da string e obtendo somente os dígitos $value = preg_replace("/\D/", '', $value); // Validando se o CPF possui a quantidade certa de caracteres if (strlen($value) !== 11) { return ''; } // Definindo padrões: 3 sequências com 3 dígitos e uma com 2 $pattern = "/(\d{3})(\d{3})(\d{3})(\d{2})/"; // as duas primeiras sequências de 3 dígitos são separadas por um ponto, // a última, por um hífen $replacement = "\$1.\$2.\$3-\$4"; // aplicando a máscara e retornando o valor filtrado return preg_replace($pattern, $replacement, $value); } }Agora é só usar no seu form filter.
// module/Application/src/Form/ExampleFormFilter $inputFilter->add([ 'name' => 'cpf', 'required' => true, 'filters' => [ // ... ['name' => \Application\Filter\CPFMaskFilter::class], ], 'validators' => [ // ... ], ]);Pronto! Agora pode criar filtros conforme sua necessidade.
namespace Application\View\Helper; use Application\Filter\CPFMaskFilter; use Zend\View\Helper\AbstractHelper; class CPFMaskViewHelper extends AbstractHelper { public function __invoke($cpf) { // Este ViewHelper que criamos apenas delega o trabalho ao filtro que criamos anteriormente return (new CPFMaskFilter())->filter($cpf); } }Em seguida um alias para o mesmo, para utilizarmos na view.
// module/Application/src/Module.php public function getViewHelperConfig() { return [ 'invokables' => [ // ... 'cpfMask' => \Application\View\Helper\CPFMaskViewHelper::class ] ]; }
<?php echo $this->cpfMask('12345678901'); ?>
{{ cpfMask('12345678901') }}Em ambos os exemplos a saída é: 123.456.789-01 That's all!