Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TUniqueValidator Necessitei criar uma validação para campos únicos e espero que possa servir de ajuda a alguém... Segue o código da classe: ...
FO
TUniqueValidator  
Fechado
Necessitei criar uma validação para campos únicos e espero que possa servir de ajuda a alguém...

Segue o código da classe:

  1. <?php
  2. class TUniqueValidator extends TFieldValidator
  3. {
  4.     private $database;
  5.     private $model;
  6.     private $field;
  7.     private $value;
  8.     private $id;
  9.     
  10.     public function validate($label$value$parameters NULL)
  11.     {
  12.         $this->id    $parameters['id'];
  13.         $this->model $parameters['model']; 
  14.         $this->field $parameters['field'];
  15.         $this->value $value;
  16.         $this->database $parameters['database'];
  17.                 
  18.         if (!$this->checkUnique())
  19.         {
  20.             throw new Exception("$label já cadastrado no banco de dados");
  21.         }
  22.     }
  23.     
  24.     private function checkUnique()
  25.     {
  26.         try
  27.         {
  28.             TTransaction::open($this->database);
  29.             $repository = new TRepository($this->model);
  30.             
  31.             $criteria = new TCriteria;
  32.             $criteria->add(new TFilter($this->field'='$this->value));
  33.             
  34.             if (($this->id) && ($this->id <> '') && (!is_null($this->id)))
  35.             {
  36.                 $criteria->add(new TFilter('id''<>'$this->id));
  37.             }
  38.             
  39.             $count $repository->count($criteria);
  40.             
  41.             TTransaction::close();
  42.             
  43.             return ($count <= 0);
  44.         }
  45.         catch (Exception $e)
  46.         {
  47.             new TMessage('error'$e->getMessage());
  48.             TTransaction::rollback();
  49.         }
  50.     }
  51. }
  52. ?>


Eu tentei de toda maneira implementar ele na construção do formulário mas não consegui, então um exemplo prático de sua utilização é adicionar o seguinte código no evento onSave do seu formulário:

  1. <?php
  2.             //validation Unique
  3.             $uniqueValidator = new TUniqueValidator;
  4.             $uniqueValidator->validate('CPF'$object->cpf, array('database' => 'ieadb''model' => 'Member','field' => 'cpf''id' => $object->id));
  5. ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (4)


FC

Bacana, mas para isso eu apenas coloco como único no banco e trato a exceção.
DD

criei o arquivo TUniqueValidator.php na pasta libadiantivalidator, mas ao chamá-lo de dentro de um programa que está no appcontrol me dá o erro como se não encontrasse o TUniqueValidator.php. Como eu adiciono ele no path para ser reconhecido? ou tenho que usar o include dele ou use ?
JB

Felipe Cortez, pode me ajudar demonstrando como fez?
Estou iniciando no framework e quero fazer a validação da mesma maneira que você.
EM

Como faço para validar mais de um capo, tipo; estados e cidades. Eles não podem ser repetidos. E como passar dois argumentos para a validação? Já estou a dias tentando isso, agradeço se poder me ajudar.