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:
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:
Segue o código da classe:
- <?php
- class TUniqueValidator extends TFieldValidator
- {
- private $database;
- private $model;
- private $field;
- private $value;
- private $id;
- public function validate($label, $value, $parameters = NULL)
- {
- $this->id = $parameters['id'];
- $this->model = $parameters['model'];
- $this->field = $parameters['field'];
- $this->value = $value;
- $this->database = $parameters['database'];
- if (!$this->checkUnique())
- {
- throw new Exception("$label já cadastrado no banco de dados");
- }
- }
- private function checkUnique()
- {
- try
- {
- TTransaction::open($this->database);
- $repository = new TRepository($this->model);
- $criteria = new TCriteria;
- $criteria->add(new TFilter($this->field, '=', $this->value));
- if (($this->id) && ($this->id <> '') && (!is_null($this->id)))
- {
- $criteria->add(new TFilter('id', '<>', $this->id));
- }
- $count = $repository->count($criteria);
- TTransaction::close();
- return ($count <= 0);
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- }
- ?>
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:
- <?php
- //validation Unique
- $uniqueValidator = new TUniqueValidator;
- $uniqueValidator->validate('CPF', $object->cpf, array('database' => 'ieadb', 'model' => 'Member','field' => 'cpf', 'id' => $object->id));
- ?>
Bacana, mas para isso eu apenas coloco como único no banco e trato a exceção.
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 ?
Felipe Cortez, pode me ajudar demonstrando como fez?
Estou iniciando no framework e quero fazer a validação da mesma maneira que você.
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.