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


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

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.

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;
    }