Bonjour,

Je suis en train de développer un site en cakePHP 2 qui comprends une admin où l'utilisateur peut ajouter des posts. Chaque post peut faire partie de une ou plusieurs catégories, j'ai donc une relation HABTM.

Lorsque l'utilisateur ajoute un post il peut cocher une ou plusieurs catégories dans une liste de checkbox, ce qui me renvoie un tableau de catégories que je traite par la suite avec le reste des données.

Je me retrouve alors confronté un problème, en effet pour pouvoir valider si l'utilisateur à bien coché une catégorie je passe par la règle de validation suivante dans le modèle Post:

'categories' => array(
    'rule' => array('multiple', array('min' => 1)),
    'required' => true,
    'message' => 'Selectionnez au moins une catégorie pour votre actualité.'
)

Elle fonctionne parfaitement, mais implique que j'ajoute mon tableau de catégories au donnée du modèle Post, or vu que je suis dans une relation HABTM je ne dois pas avoir ce tableau dans les données de mon modèle au moment de la sauvegarde car cela provoque une erreur, vu qu'aucun champ de correspond dans ma table posts.

Je souhaite donc supprimer mon tableau de catégories des données du modèle après la validation mais avant la sauvegarde. J'ai bien entendu penser à utiliser la méthode beforeSave() mais je ne trouve pas comment faire pour redéfinir les champs à sauvegarder après la validation ...

Est-il possible de dire au modèle de ne sauvegarder que certain champs, mais après la validation ?

3 réponses


Paupy
Auteur
Réponse acceptée

Je viens de trouver la solution à mon problème ...

En fait, j'ai fini par croire qu'il était impossible de passer un champ qui n'existait pas à un modèle, ce qui était complètement aberrant !

Le problème venait simplement que j'avais déclaré la méthode beforeSave() dans le modèle sans lui faire retourner la valeur true! Du coup, le modèle ne pouvait pas sauvegarder les données.

Il semblerait aussi que le fait de faire des debug() dans une fonction de sauvegarde influence le bon déroulement de la sauvegarde, mais c'est à vérifier ...

En faisant un unset de certaines données ça ne passe pas ?

Paupy
Auteur

J'ai testé de valider les données, puis dans le beforeSave() de faire un unset() du tableau des catégories dans le tableau des données du modèle. Je stocke le tableau des catégories dans une variable globale pour ensuite l'insérer dans la table HABTM ( categories_posts ).

Cela fonctionne en théorie sauf que le modèle essaie de sauvegarder la valeur du champ catégorie puisque je lui ai dit de le faire pour la validation. Et j'ai bien l'impression que je fait de le supprimer du tableau de données ne supprime ce comportement ...

Du coup il ne se passe rien puisque cakePHP se retrouve à essayer de sauvegarder un champ qui n'existe pas ...