Salut, je vient de me mettre à cakePHP suite aux derniers tutos et je rencontre un soucis au niveau des commentaires.
( Au passage j'utilise cakePHP 2 )

Donc je créer mon formulaire :

echo $this->Form->create('Comment',array('url'=>array('controller'=>'comments', 'action'=>'add')));

Qui emmène vers le controller Comments (je préfère créer un controller séparé qui gère ça).

CommentsController

function add(){
        if(!empty($this->data)){
            $this->Comment->set($this->data);
            if($this->Comment->validates()){
                $this->Comment->save($this->data);
                $this->Session->setFlash('Message bien envoyé', 'default', array('class' => 'notification success'));
                $this->redirect(array('controller'=>'posts', 'action'=>'view', $this->data'Comment']'post_id']));
            }
            else{
                $this->Session->setFlash('Une erreur est survenue lors de l\'envoi de votre commentaire', 'default', array('class' => 'notification error'));
                $this->redirect(array('controller'=>'posts', 'action'=>'view', $this->data'Comment']'post_id']));
            }
        }
    }

Tout se passe bien, l'envoi et la validation du formulaire se passe bien, les setFlash fonctionnent très bien aussi.
Sauf qu'en cas d'erreur (le else donc) la redirection empêche les erreurs de s'afficher sur le formulaire (et d'auto-remplir les champs par le même occasion).

Ma question : Comment gérer les erreurs de la validation du formulaire avec une redirection (sachant que sans la redirection, il me demande une vue inexistante évidemment) ?

5 réponses


Déjà si tu es sur CakePHP 2 $this->data devrait être $this->request->data;

Ensuite si tu fais une redirection tu stocke ces data en session puis tu les réinjecte dans $this->request->data une fois sur l'autre action (ou tu fais ça dans l'AppController pour gérer ça de manière globale.

Nazahel
Auteur

Hum es-tu sûr que les erreurs sont contenues dans data ?
Quand je test sur un formulaire de contact (sans redirection), ça donne :

$this->request->data

Array
(
    [Contact] => Array
        (
            [name] => 
            [mail] => 
            [content] => 
        )
)

$this->Form->validationErrors

Array
(
    [Contact] => Array
        (
            [name] => Array
                (
                    [0] => Nom invalide
                )
            [mail] => Array
                (
                    [0] => Mail invalide
                )
        )
)

Et donc si je fait passer en session les champs invalides (pour les commentaires) :

$this->Session->write('Comment.error',$this->Comment->invalidFields());

Array
(
    [pseudo] => Array
        (
            [0] => Le pseudo n'est pas valide
            [1] => Le pseudo n'est pas valide
        )
    [mail] => Array
        (
            [0] => Votre est mail est invalide
            [1] => Votre est mail est invalide
        )
)

Mais les message ne s'affichent toujours pas :x

Nazahel
Auteur

Bon finalement je fait la gestion des commentaires au même endroit que l'affichage du post, plus facile, ça évite les problème et je peut vérifier si l'id est correct...

En tout cas merci quand même !

Je suis quand même assez de curieux de savoir comment tu as fait pour tes commentaire partie tutoriels ^^'

Compte tu faire des tutos sur cakePHP 2 ??

Oui les tutos Cake2 arrivent, je prépare une petite vidéo transition Cake1.3 > Cake2 :)

Nazahel
Auteur

Ahhh bien ! J'attends ça avec impatience :3
Moi qui n'arrive pas même pas à afficher une page 404 :x