Probléme validation/sauvegarde HABTM

Par Majid Cameleon, il y a 10 ans


Bonjour,
Suite à mon précédent post, créer un nouvel enregistrement et ses associations ne sont pas un soucis en HABTM.
Mon précédent soucis venait de la sensibilité de la case, je m'explique.

//request->data array('post' => array('content' => 'blabla'), 'tag' => array('tag' => array('1', '2' ,'3'))); //Avec ce tableau, la sauvegarde en HABTM ne fonctionne pas mais la validation fonctionne, //request->data array('Post' => array('content' => 'blabla'), 'Tag' => array('Tag' => array('1', '2' ,'3'))); //La sauvegarde HABTM fonctionne bien, mais à l'inverse la validation ne fonctionne plus.

Une idée d'où cela pourait prevenir, car je suis à court d'idées.
Merci à vous,

3 réponses

Grafikart, il y a 10 ans

Tu veux valider Tag ou Post ? Si c'est Tag, tu es sûr que la validation marche à travers une relation ?

Majid Cameleon, il y a 10 ans

Hi, merci à toi

Et bien je souhaite valider les deux

if($this->Post->validates() && $this->Post->Tag->validates()){

C'est fonctionnel à condition que "request->data" ai les noms de modéles en minuscule.
Mais du coup si je fais ça, j'ai la sauvegarde HABTM qui fonctionne pas.

Majid Cameleon, il y a 10 ans

J'ai finalement tout refait à zéro. Je valide mes Tags depuis le modéle Post et ensuite je les renvoies pour la sauvegarde.
J'aimerais juste ton avis, critique pour ma fonction de validation de tag, pour mon apprantissage.

public function validateTag($check) { if(!empty($check['tags'])){ foreach ($check['tags'] as $key => $tag){ if(preg_match('/^[0-9]+$/', $tag)){ //vérifie si le chiffre donné correspond à un id éxistant. if($this->Tag->exists($tag)){ continue; } } elseif(!preg_match('/^[\\p{L}]+$/iu', $tag)){ $check['tags'][$key] = false; } else { $this->Tag->create(); $this->Tag->saveField('label' , $tag); $check['tags'][$key] = $this->Tag->getId(); } } foreach ($check['tags'] as $tag){ if (!$tag){ return false; //si un des nouveau tag a retourné false alors la validation à échoué. } } } return true; }