Skip to content

Validação de campo

Bjverde edited this page Sep 14, 2020 · 3 revisions

Esse artigo foi criado para o Adianti FrameWork 7.2.2. Surgiu da necessidade de criar novas validações não disponíveis no FrameWork e como ajudar outras pessoas com problemas semelhantes.

Para os campos TDate e TDatetime uma validação da menor data possível e da maior data possível é algo interesse para diversos sistemas.

Para criar um Validator basta seguir as etapas

  1. Criar uma classe em app/lib/validador
  2. Sua classe deve estender de TfieldValidator
  3. Crie o método public function validate($label, $value, $parameters = NULL)

Pronto essa é a estrutura básica!!

Como usar ? Basta criar um campo e informar o validador.

$date = new TDateTime($id);
$parameters[0] = ‘dd/mm/yyyy’;
$parameters[1] = ‘31/12/2020’;
$date->addValidation($strLabelnew TFormDinDateValidatorMax$parameters);

O exemplo de concreto de validador

<?php
/**
 * Date validation Max Date
 *
 * @version    1.0
 * @package    validator
 * @author     Reinaldo A. Barreto Jr
 */
class TFormDinDateValidatorMax extends TFieldValidator
{
    /**
     * Apresenta uma mensagem de erro se a data do campo é poster a data Maxima limite
     * Funciona com campo Date ou Datetime independe da máscara
     * @param $label Label do campo
     * @param $value Valor do campo
     * @param $parameters aditional 0=>MaskDate (máscara campo Date ou DateTime), 1=>MaxLimitDate (data limite no mesmo formato da máscara)
     */
    public function validate($label, $value, $parameters = NULL)
    {
        if( !empty($value) ){
            $defaultMask = 'yyyy-mm-dd hh:ii';
            $maskDat = $parameters[0];
            $maxLimitDate = $parameters[1];

            $dateValue    = TDateTime::convertToMask($value, $maskDat, $defaultMask);
            $maxLimitDate = TDateTime::convertToMask($maxLimitDate, $maskDat, $defaultMask);

            $dateValue    = new DateTime($dateValue);
            $maxLimitDate = new DateTime($maxLimitDate);

            //$maxLimitDate older than $dateValue
            $interval = $dateValue->diff($maxLimitDate); //If Date is in past then invert will 1
            if($interval->invert == 1){
                throw new InvalidArgumentException("O campo $label recebeu $value e não pode ser posterior a data $parameters[1]");
            }
        }
    }
}
?>

Todo validador precisa ter um método validate($label, $value, $parameters = NULL)

  • $label = o rotulo do campo
  • $valor = valor do campo
  • $parameter = array com todos os parâmetros extras e necessários.

No exemplo são 2 os parâmetros extras

  • $parameters[0] = máscara campo Date ou DateTime no formato do Adianti
  • $parameters[1] = data limite no mesmo formato da máscara O método TdateTime::convertToMask recebe um valor a máscara de saída e a mascara de entrada. Depois tudo é convertido para DateTime usando o método diff é possível saber
Clone this wiki locally