Il arrive bien souvent que l’on souhaite valider des champs qui ne sont pas forcément pour autant liés au modèle courant de la base de données.
Par exemple, dans Opencomp, j’ai un écran qui permet à l’enseignant de sélectionner les périodes pour lesquelles il souhaite générer le bulletin des élèves.
Cette informations doit obligatoirement être renseignée puisque sinon, il n’est pas possible de générer le bulletin.
Normalement, les règles de validation de CakePHP ne sont censées être utilisées que pour valider les champs du modèle courant. Cependant, il possible de tricher un peu en ajoutant des règles de validation manuellement à la volée depuis le contrôleur.
//Si l'utilisateur a envoyé le formulaire
if($this->request->is('post')){
//On ajoute une règle de validation à la volée depuis
//le contrôleur sur le champ period_id.
$this->Result->validate['period_id']['multiple'] = array(
'rule' => array('multiple', array('min' => 1)),
'message' => 'Sélectionnez au moins une option'
);
//On doit charger les données du formulaire dans le modèle
$this->Result->set($this->request->data);
//Si la validation a réussi
if ($this->Result->validates()) {
//On fait ce que l'on veut ;)
}
}
Vous pouvez voir la fonction dans son ensemble et avec le contexte ici https://github.com/jtraulle/Opencomp/blob/devel/app/Controller/ResultsController.php
À bientôt 😉
bonjour
/On doit charger les données du formulaire dans le modèle-> ce n’est pas le contraire?
Bonjour Hervé, non non, pas d’erreur ici, on récupère bien les données du formulaire qui sont stockées dans l’objet Request de CakePHP pour charger dans le modèle (Result dans mon cas) 🙂