Welcome to the Cookbook

loading...

4.1.2 Uma Regra por Campo

Esta técnica de definição permite um melhor controle sobre como as regras de validação funcionam. Mas antes de discutirmos isso, vamos ver o padrão de uso geral para adicionar regras à um campo único:

var $validate = array(
    'fieldName1' => array(
        'rule' => 'ruleName', // ou: array('ruleName', 'param1', 'param2' ...)
        'required' => true,
        'allowEmpty' => false,
        'on' => 'create', // ou: 'update'
        'message' => 'Sua mensagem de erro'
    )
);
  1. var $validate = array(
  2. 'fieldName1' => array(
  3. 'rule' => 'ruleName', // ou: array('ruleName', 'param1', 'param2' ...)
  4. 'required' => true,
  5. 'allowEmpty' => false,
  6. 'on' => 'create', // ou: 'update'
  7. 'message' => 'Sua mensagem de erro'
  8. )
  9. );

A chave 'rule' é obrigatória. Se você definir apenas 'required' => true, a validação de formulário não vai funcionar corretamente. Isto porque 'required' atualmente não é uma regra.

Como você pode ver, cada campo (apenas um campo foi mostrado acima) é associado com um array com cinco chaves: 'rule', 'required', 'allowEmpty', 'on' e 'message'. À exceção da chave 'rule', as demais chaves são opcionais. Vamos analisar estas chaves.

4.1.2.1 rule

A chave 'rule' define um método de validação e aceita tanto um único valor quanto um array. O valor da chave 'rule' deve ser o nome de um método em seu model, um método da classe de validação principal, ou uma expressão regular. Para mais informações sobre as regras disponíveis por padrão, veja as <a href="/view/134/Core-Validation-Rules">Regras de validação incorporadas por padrão</a>.

Se a regra não exigir nenhum parâmetro, a chave ‘rule’ pode conter um único valor ex:

var $validate = array(
    'login' => array(
        'rule' => 'alphaNumeric'
    )
);
  1. var $validate = array(
  2. 'login' => array(
  3. 'rule' => 'alphaNumeric'
  4. )
  5. );

Se a regra exigir mais de um parâmetro (como max, min ou range), o valor de ‘rule’ deve ser um array:

var $validate = array(
    'password' => array(
    'rule' => array('minLength', 8),
);
  1. var $validate = array(
  2. 'password' => array(
  3. 'rule' => array('minLength', 8),
  4. );

Lembre-se, a chave 'rule' é obrigatória para regras baseadas em array.

4.1.2.2 required

Para esta chave deve se dar um valor booleano. Se ‘required’ for verdadeiro, o campo deve estar presente na array de dados. Por exemplo, se a regra de validação for definida como a seguir:

var $validate = array(
    'login' => array(
        'rule' => 'alphaNumeric',
        'required' => true
    )
);
  1. var $validate = array(
  2. 'login' => array(
  3. 'rule' => 'alphaNumeric',
  4. 'required' => true
  5. )
  6. );

Os dados enviados para o método save() do seu model devem conter o campo de login. Senão, a validação irá falhar. O valor padrão para esta chave é false.

required => true não é o mesmo que a regra de validação notEmpty(). required => true indica que o respectivo índice do array de dados deve existir - o que não quer dizer que ele precise ter um valor. Desta forma, a validação irá falhar se o campo não estiver presente no dataset, mas pode ter sucesso (dependendo da regra) se o valor submetido for vazio ('').

4.1.2.3 allowEmpty

A chave allowEmpty deve possui um valor booleano. Se allowEmpty for falso, os dados passados para o método save() do model devem incluir o campo e ele não poderá ser vazio. Se for verdadeiro e o campo estiver vazio, todo e qualquer tipo de validação será ignorado.

O valor padrão para allowEmpty é null. Ou seja, o campo sempre processará as regras de validação, incluindo funções de validação personalizada.

Se definido para false, o valor do campo deve ser "não-vazio", sendo "não-vazio" definido como !empty($valor) || is_numeric($valor). A verificação de dado numérico confere se o CakePHP fará a coisa certa quando $valor for zero.

A diferença entre required e allowEmpty pode não ser muito clara. 'required' => true significa que você não pode salvar o model se o índice para este campo não existir no $this->data (a verificação é feita com a função isset); ao passo que 'allowEmpty' => false assegura que o valor do campo atual seja "não-vazio", como descrito acima.

4.1.2.4 on

A chave 'on' pode conter os seguintes valores: 'update' ou 'create'. Isso lhe permite aplicar uma certa regra durante a criação ou a atualização de um registro.

Se uma regra for definida como 'on' => 'create', a regra será executada apenas quando algum registro for criado. Por outro lado, se estiver definida como 'on' => 'update', ela será executada apenas quando algum registro for atualizado.

O valor padrão para 'on' é null. Quando 'on' estiver definido como null, a regra será executada durante a criação e a atualização de um registro.

4.1.2.5 message

A chave ‘message’ permite você definir mensagens de erro de validação personalizadas para uma regra:

var $validate = array(
    'password' => array(
        'rule' => array('minLength', 8),
        'message' => 'A senha deve ter no mìnimo 8 caracteres'
    )
);
  1. var $validate = array(
  2. 'password' => array(
  3. 'rule' => array('minLength', 8),
  4. 'message' => 'A senha deve ter no mìnimo 8 caracteres'
  5. )
  6. );

4.1.2.6 last

There is no translation yet for this section. Please help out and translate this.. More information about translations

Setting the 'last' key to true will cause the validator to stop on the rule if it fails instead of continuing with the next rule. This is handy if you want validation to stop if the field is notEmpty in a multi-rule field.

var $validate = array(
    'username' => array(
        'usernameRule-1' => array(
            'rule' => 'notEmpty',  
            'message' => 'Please enter a username.',
            'last' => true
         ),
        'usernameRule-2' => array(
            'rule' => array('minLength', 8),  
            'message' => 'Minimum length of 8 characters.'
        )  
    )
);
  1. var $validate = array(
  2. 'username' => array(
  3. 'usernameRule-1' => array(
  4. 'rule' => 'notEmpty',
  5. 'message' => 'Please enter a username.',
  6. 'last' => true
  7. ),
  8. 'usernameRule-2' => array(
  9. 'rule' => array('minLength', 8),
  10. 'message' => 'Minimum length of 8 characters.'
  11. )
  12. )
  13. );

The default value for 'last' is false.