J'ai écrit une méthode de validation personnalisée dans mon modèle de soumission qui permet essentiellement un champ de saisie vide, mais une fois que quelqu'un entre quelque chose, il va valider les données saisies.Règle de validation personnalisée dans CakePHP ne fonctionnant pas comme prévu
La validation dans mon modèle de soumission ressemble à ceci (Toutes les autres règles de validation fonctionnent à l'exception de « description »):
var $validate = array(
'title' => array(
'title' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a title'
),
'minLength' => array(
'rule' => array('minLength', 5),
'message' => 'Please make your title longer'
),
'maxLength' => array(
'rule' => array('maxLength', 300),
'message' => 'Your title needs to be shorter'
),
),
'description' => array(
'checkDescription' => array(
'rule' => array('validateDescription'),
'message' => 'Description must be greater than 5 characters'
),
),
'source' => array(
'source' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Enter a valid source URL'
),
'website' => array(
'rule' => 'url',
'message' => 'Please enter a valid source URL'
),
)
);
Ma méthode qui est aussi dans mon modèle de soumission (ci-dessous le code ci-dessus) est :
public function validateDescription($data) {
if(empty($data['Submission']['description']))
return true;
if((strlen($data['Submission']['description'])) <= 5)
return false;
}
Je ne sais pas pourquoi cela ne fonctionne pas du tout. À mon avis, j'ai cette option pour afficher l'erreur:
if ($form->isFieldError('Submission.description'))
echo ($form->error('Submission.description', null, array('class' => 'error')));
La seule raison pour laquelle je suis en train de le faire, est parce que l'utilisation de la validation normale avec required => false
et allowEmpty => true
avec une règle de validation minLength
et maxLength
ne se comportaient pas comme je l'avais prévu.
Toute aide serait grandement appréciée! :)
qui l'a fait. Je vous remercie! Si je devais ajouter une autre règle de validation à cela, comment suggéreriez-vous que je renvoie un 'message' personnalisé au tableau 'description' dans la propriété $ validate? Je pensais faire peut-être 3 conditions et changer le $ message = 'doit être supérieur à 5 caractères' ou $ message = 'doit être inférieur à 10k caractères' et le retourner. –
Je combinerais cela en un seul message ("doit être entre x et y") ou faire des règles distinctes que chacun a son propre message. – deceze
notez également qu'il vous manque la partie cruciale "last" => true – mark