Bonjour,
je suis entrain de développer un blog et j'ai déjà mis en place le plugin comment. Tout marche très bien. Dans mon cas, j'ai dû modifier le plugin pour que ce dernier marche en Ajax (le code n'est pas propre pour le moment car je veux d'abord le tester) :

Fonction add du CommentsController (Plugin)

<?php
if( $this->Comment->validates() || ($user_id && !empty($this->request->data'Comment']'content'])) ){
    // ... Il y a la partie superieur du code ici
    // On ne publie pas par défaut les nouveaux commentaire
    $this->Comment->data'Comment']'online'] = 0;

    $this->Comment->save(null, false);
    $this->Session->setFlash(__("Merci pour votre commentaire. Un modérateur l'examinera et le publiera dans les plus brefs délais"), "notif", array('class' => 'success'));
    if($this->RequestHandler->isAjax()){
        $data'success'] = true;
        $data'url'] = $referer_json;
        return json_encode($data);
    }else{
        return $this->redirect($referer);
    }
}else{
    if($this->RequestHandler->isAjax()){
        return json_encode($this->validateErrors($this->Comment));
    }else{
        $this->Session->setFlash(__("Certains champs n'ont pas été rempli correctement, merci de corriger vos erreurs"), "notif", array('class' => 'errors'));
        return $this->redirect($referer);
    }
}
// Reste du code
?>

Bref, lorsque je clique sur Poster , j'ai bien le retoure des erreurs en Ajax :

// Ajout d'un nouveau commentaire sur un article du blog
    $( '#postComment' ).click(function(){
        $.ajax({
            'type' : 'POST',
            'url' : $( '#commentForm' ).attr('action'),
            'data' : $( '#commentForm' ).serializeArray(),
            'dataType' : 'json',
            beforeSend: function(){
                $( '#commentForm' ).find('.error').removeClass('error');
                $( '#commentForm' ).find('.error-message').remove();
            },
            success : function(data){
                if(data.success){
                    $(location).attr('href', data.url);
                }else{
                    if(data.username){ displayError( '#CommentUsername', data.username ); }
                    if(data.mail){ displayError( '#CommentMail', data.mail ); }
                    if(data.content){ displayError( '#CommentContent', data.content ); }
                }
            }
        });
        return false;
    });

Tout marche très bien.

Mon problème vient du fait que dans mon formulaire, si j'entre d'abord un commentaire (avant d'entré un nom et une adresse email) et que je clique sur Poster , CakePHP sauvegarde la formulaire et le valide même si les champs username et mail ne sont pas rempli.

J'ai regarder et encore regarder d'ou cela pouvait venir, mais rien du tout. C'est pour ça que je poste ici aujourd'hui.

Avez-vous aussi ce problème? Merci à tous pour votre aide

2 réponses


kal-el
Auteur
Réponse acceptée

Salut et merci pour ta réponse. En fait j'ai resolu mon probleme. J'avais desactiver la gestion des utilisateurs dans le plugin car c'est un comportement que je ne pouvais pas avoir dans mon cas et cette ligne posait probleme vu que sa verifie aussi par rapport a l'utilisateur :

if( $this->Comment->validates() || ($user_id && !empty($this->request->data'Comment']'content'])) ){

Je n'ai laisser que le validate.

if( $this->Comment->validates() ){

Merci en tout cas

Salut,
a quel endroit fais tu le controle sur les champs username et mail avant d'envoyer?
Il serait bien de mettre ton Model afin de voir si cela peut provenir des conditions qui y sont normalement précisées ;)