-
Notifications
You must be signed in to change notification settings - Fork 5
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
- Criar uma classe em app/lib/validador
- Sua classe deve estender de TfieldValidator
- 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($strLabel, new 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
Índice completo - Aprendendo FormDin 5 em etapas
Conheça o outros projetos relacionados ao FormDin 5
- FormDin 5 Last Release - ultima versão estável do FormDin 5
- formDocker - Ambiente para o formDin em Docker
- FormDin 4 Last Release - ultima versão estável do FormDin 4
- SysGen - Gerador de código para FormDin 4