Neste post mostrarei os validadores presentes no Doctrine (usei a versão 1.2.3). O Doctrine facilita a validação dos dados, bastando apenas definir os validadores para cada atributo ao invés de fazer vários malabarismos com funções do PHP e expressões regulares. Você pode definir os validadores na classe que estende a classe base. Dessa maneira, você pode gerar o model novamente e suas alterações não serão perdidas. Primeiro listarei os validadores e ao final mostrarei alguns exemplos. Vamos lá.

Importante

Para que seus dados sejam validados, cheque se seu “bootstrap.php” contém a diretiva abaixo. Caso contrário, seus dados não serão validados.

<?php
$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);

notnull

Garante que o valor não seja nulo na aplicação e no banco de dados.

<?php // models/SuaClasse.php

class SuaClasse extends BaseSuaClasse {
	// ...

	public function setTableDefinition(){
		parent::setTableDefinition();

		// ...

		$this->hasColumn('nome', 'string', 70, array(
			'notnull' => true
		));
	}
}

Válido: teste, jonnas Inválido: valores nulos

email

Checa se o valor é um endereço de email válido.

<?php
$this->hasColumn('email', 'string', 100, array(				  
	'email' => true		  
)); 

Válido: contato@email.net Inválido: fulano!#@server

notblank

Este validador é semelhante ao validador notnull, exceto que além de não validar valores nulos, também não valida strings vazias.

<?php
$this->hasColumn('nome', 'string', 100, array(				  
	'notblank' => true		  
)); 

Válido: teste, jonnas Inválido: valores nulos, “

nospace

Checa se o valor não contém espaços.

<?php
$this->hasColumn('campo_sem_espacos', 'string', 100, array(				  
	'nospace' => true		  
)); 

Válido: JonnasFonini Inválido: Jonnas Fonini

past

Checa se o valor é uma data que já ocorreu, o dia de ontem, por exemplo.

<?php
$this->hasColumn('data', 'timestamp', null, array(				  
	'past' => true		  
)); 

Válido: Sendo hoje 14/09/2010, 01/01/2010 é válida Inválido: Sendo hoje 14/09/2010, a mesma e posteriores são inválidas

future

Checa se o valor é uma data que ainda não aconteceu, amanhã, por exemplo.

<?php
$this->hasColumn('data', 'timestamp', null, array(
	'future' => true		  
)); 

Válido: Sendo hoje 14/09/2010, 15/09/2010 é válida Inválido: Sendo hoje 14/09/2010, a mesma e anteriores são inválidas

minlength

Checa se o valor passado tem o tamanho mínimo necessário.

<?php
$this->hasColumn('senha', 'string', 32, array(				  
	'minlength' => 6		  
)); 

Válido: abcdef, abcdefg Inválido: abc

ip

Checa se o valor passado é um endereço IP válido.

<?php
$this->hasColumn('endereco_ip', 'string', 15, array(				  
	'ip' => true		  
)); 

Válido: 192.168.250.222, 201.10.34.21 Inválido: 345.10.10.290

htmlcolor

Checa se o valor passado é uma cor HTML em hexadecimal.

<?php
$this->hasColumn('cor', 'string', 7, array(				  
	'htmlcolor' => true		  
)); 

Válido: #000FFF, FF0000 Inválido: #GGG111, #FFF (cores abreviadas são inválidas)

range

Checa se o valor numérico está contido no intervalo especificado.

<?php
$this->hasColumn('idade', 'integer', null, array(
	'range' => array(18, 70)			  
));

Válido: 19, 50, 69 Inválido: 10, 18, 70

unique

Checa se o valor já existe no banco de dados.

<?php
$this->hasColumn('rg', 'string', 15, array(				  
	'unique' => true
));  

regexp

Checa se o valor casa com a expressão regular passada.

<?php
$this->hasColumn('somente_letras', 'string', 15, array(				  
	'regexp' => '/^[a-zA-Z]+$/'		  
));

Válido: flex Inválido: flex4

creditcard

Checa se o valor é um número de cartão de crédito válido.

<?php
$this->hasColumn('cartao', 'integer', 16, array(				  
	'creditcard' => true
)); 

Válido: Cartões Visa, Master Card, American Express, Discover e Diners Inválido: Outras bandeiras, exceto as citadas acima

readonly

Evita que o valor de uma coluna da tabela seja alterado.

<?php
$this->hasColumn('coluna_que_nao_pode_ser_alterada', 'string', 25, array(				  
	'readonly' => true
));  

unsigned

Checa se o valor númerico passado possui sinal, de menos, por exemplo.

<?php
$this->hasColumn('idade', 'integer', 3, array(
	'unsigned' => true		  
)); 

Válido: 70, 100 Inválido: -20

usstate

Checa se a string passada é a sigla válida de um estado americano. Confira a lista completa aqui.

<?php
$this->hasColumn('estado_americano', 'string', 2, array(				  
	'usstate' => true		  
));

Válido: AL, CA Inválido: QW

country

Checa se a string passada é a sigla válida de um país. Confira a lista completa aqui.

<?php
$this->hasColumn('pais', 'string', 2, array(				  
	'country' => true
));  

Válido: br, BR, ar Inválido: xx

Grande abraço e até a próxima!