CakePHP - melhorando a validação
Monday, 11 - 08 - 2008
Posted by Rafael Dx7 at 14:43
uma coisa muito utilizada em qualquer framework é a validação de campos em formulários. com o CakePHP podemos fazer isso de uma forma bem simples.
o método tradicional é ter um atributo no controller que é um array contendo as regras de validação, desta forma:
<?php
class User extends AppModel {
var $name = 'User';
var $validate = array(
'login' => array(
'alphanumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Alphabets and numbers only'
),
'between' => array(
'rule' => array('between', 5, 15),
'message' => 'Between 5 to 15 characters'
)
),
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'Mimimum 8 characters long'
),
'email' => 'email',
'born' => array(
'rule' => 'date',
'message' => 'Enter a valid date',
'allowEmpty' => true
)
);
}
?>
eu não gosto dessa maneira. o código fica muito embolado e não é de fácil leitura. dependendo da complexidade do formulário ficamos com muitos arrays aninhados.
acho a maneira abaixo mais interessante:
<?php
class User extends AppModel {
public $validate = array();
public $hasMany = array('Profile');
function __construct() {
$this->validate['name'] = array('minLength' => array('rule' => array('minLength', 5), 'required' => true, 'message' => __('Name with 5 characters', true)));
$this->validate['nickname'] = array('alphanumeric' => array('rule' => 'alphaNumeric', 'required' => true, 'message' => __('Alphabets and numbers only', true)),
'between' => array('rule' => array('between', 5, 10), 'message' => __('Between 5 to 10 characters', true)),
'unique' => array('rule' => 'isUnique', 'message' => __('This nickname has already been taken', true)));
$this->validate['email'] = array('email' => array('rule' => array('email'), 'required' => true, 'message' => __('Enter a valid e-mail address', true)),
'unique' => array('rule' => 'isUnique', 'message' => __('This e-mail has already been taken', true)));
$this->validate['language'] = array('alphanumeric' => array('rule' => 'alphaNumeric', 'required' => true, 'message' => __('Alphabets and numbers only', true)),
'minLength' => array('rule' => array('minLength', 2), 'message' => __('Language with 2 characters', true)));
$this->validate['password'] = array('minLength' => array('rule' => array('minLength', '6'), 'message' => __('Mimimum 6 characters long', true)));
parent::__construct();
}
}
?>
dessa forma, temos em linhas separadas, uma visualização melhor das validações de cada campo.
repare que criei o atributo $validate como um array vazio por padrão. e dentro do construtor da classe, fui definindo as validações dos campos, como muito mais clareza, legibilidade. o resultado? o mesmo.
PS: o gist ficou uma bosta aqui. tive que colocar desta cor porque senão não daria pra ler nada. depois vou melhorar isso.
Back
