Lorsque la valeur d'une clé étrangère est saisie à l'aide d'une liste déroulante, la validation doit s'assurer que la valeur de la clé étrangère existe dans la table correspondante.
Par exemple, si on tente de créer un produit dont la catégorie correspond à l'identifiant 13, il faut qu'il existe un enregistrement dans la table des catégories avec l'identifiant 13.
Mais pourquoi devrions-nous nous soucier de ceci puisque nous avons nous-même généré la liste déroulante à partir de valeurs tirées de la BD ? Simplement parce qu'une fois le formulaire affiché, un usager pourrait trafiquer le formulaire afin de tenter de découvrir une faille de sécurité. Rien de plus simple sous Chrome : clic droit sur la liste déroulante / Inspecter. Il suffit ensuite d'entrer la valeur de notre choix vis-à-vis d'un des éléments de la liste.
Autre cas possible : après avoir généré la liste déroulante, un autre usager a effacé un des enregistrements affiché dans la liste déroulante. La valeur de cet élément ne sera donc plus valide.
Avec Laravel, pour valider une clé étrangère :
public function rules()
{
$rules = [
'categorie_id' => 'required|exists:categories,id',
...
];
return $rules;
}
Attention : il ne doit y avoir aucun espace à l'intérieur d'une règle de validation, pas même après la virgule.
Et pour que le message affiché soit plus clair que le traditionnel « Le champ catégorie_id sélectionné est invalide. » :
public function messages()
{
return [
'categorie_id.exists' => 'La catégorie sélectionnée n'est pas valide.',
];
}
▼Publicité