[CakePHP] Valider des données non liées au modèle courant.

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.

Il est nécessaire de vérifier qu'au moins une case est correctement cochée.

Il est nécessaire de vérifier qu’au moins une case est correctement cochée.

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 😉

À propos de Jean Traullé

Passionné par l'informatique et les nouvelles technos, titulaire d'un DUT Informatique, d'une LP RGI, et d'un Master MIAGE.
Ce contenu a été publié dans Non classé, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

2 réponses à [CakePHP] Valider des données non liées au modèle courant.

  1. herve dit :

    bonjour
    /On doit charger les données du formulaire dans le modèle-> ce n’est pas le contraire?

    • Jean Traullé dit :

      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) 🙂

Laisser un commentaire