Ordem de chamada das regras de validação

DESCRIÇÃO

Pessoal, essa é a estrutura do meu método rules:

public function rules()

{


	return array(


                    array('data_trabalho','required'),


                    array('data_trabalho', 'validaRelatorioExistente','on'=>'create'),


                    array('data_trabalho', 'validaDiferencaDatas','dias'=>7,'on'=>'create'),


		array('id, data_envio, data_trabalho, servidor_cpf', 'safe', 'on'=>'search'),


	);


}

Onde validaRelatorioExistente e validaDiferencaDatas são métodos validadores criados por mim.

O ESPERADO:

Eu esperava que primeiramente passase pela regra "Required" e se desse erro nela mostrasse o erro e parasse por aí.

O PROBLEMA:

A primeira regra de validação que ele está indo é para validaDiferencaDatas e quando não tem nada no campo data_trabalho dá erro porque o campo está vazio. Qual o criterio dele para escolher primeiro a regra validaDiferencaDatas? Pensei que a ordem fosse sequencial: 1º requires,2º validaRelatorioExistente, 3ºvalidaDiferencaDatas, etc.

Veja bem,

Quando a ordem de chamada, não sei dizer. Tive que usar uma única vez, mas não sei se foi projetado ou apenas tive sorte do fw fazer as validações em ordem. No código do FW ele apenas faz as validações em sequência. Não ví em nenhum lugar modificando a ordem.

Assumindo que as validações sejam feitas na ordem do Array, Verifica se o required ta funcionando como vc espera. Veja se o valor da sua variável não é uma String vazia, pq string vazia é um valor válido, e ele vai passar pela validação.

Use http://www.yiiframework.com/doc/api/1.1/CDefaultValueValidator antes de required e veja se resolve o problema.

Acredito não ser esse o problema, na pilha de chamada ele mostra que o valor retornado é null.

Criei um metodo validador "myRequired" que só retorna false já para testar, coloquei ele na primeira regra de validação, mas quando ocorre a validação a primeira regra que aparece na pilha de chamada é a "validaDiferencaDatas". Se comento essa regra aí sim ele passa por o meu "myRequired" e retorna false