Bonjour,
J'ai un petit souci concernant l'édition sous Cake. Jusque là tout marché très bien mais je suis passé à la version 2.2.3 et j'ai maintenant un problème (je ne sais pas si c'est lié à leur nouvelle version ou si c'est moi qui n'ai pas les yeux en face des trous).

Bref, lorsque j'édite mon article, j'arrive bien sur la page d'édition. Lorsque je fais des modifications et sauvegarde, tout se passe bien.

Par contre, et le problème est là, lorsque je fais la même manipulation, mais que je vide un champ pour générer les erreurs de validation (intentionnellement), et que je sauvegarde, Cake ne modifie plus mon article mais en créer un nouveau. Je ne sais pas du tout pourquoi.

Vu que je ne savais pas d'ou venais ce problème, j'ai repris le code simple affiché sur le site de Cake dans le tutoriel sur le blog :

public function admin_edit($id = null){
        $this->Revue->id = $id;
        if ($this->request->is('get')) {
            $this->request->data = $this->Revue->read();
        } else {
            if ($this->Revue->save($this->request->data)) {
                $this->Session->setFlash('Revue modifée avec succès', 'notif');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('Impossible de sauvegarder les modifications');
            }
        }
}

Mais le problème est toujours là. Je ne sais pas d'ou cela peut venir. Merci d'avance pour votre aide.

2 réponses


essaye avec ce code :

function admin_edit($id = null){
    if($this->request->is('put') || $this->request->is('post')){
        if($this->Revue->save($this->request->data)){
            $this->Session->setFlash("Revue modifée avec succès","notif");
            $this->redirect(array('action'=>'index'));
        }else{
            $this->Session->setFlash("Impossible de sauvegarder les modifications");    
        } 
        }elseif($id){
            $this->Revue->id = $id;
            $this->request->data = $this->Revue->read();
        }else{
            $this->request->data = $this->Revue->getDraft('post');
        }
}

et dans ton model

public function getDraft($type){
        $revue = $this->find('first',array(
            'conditions' => array('online' => -1,'type' => $type)
        ));
        if(empty($revue)){
            $this->save(array(
                'type' => $type,
                'online' => -1
            ),false);
            $revue = $this->read();
        }
        $revue'Revue']'online'] = 0; 
        return $revue; 
    }

J'ai recopié mon code, adapte le au tien, mais je crois qu'il faut créé un 'brouillon' GetDraft, vu dans un des 4 tutos sur développer un site avec cakephp, tout au début du tuto.

kal-el
Auteur

Salut et merci pour ta réponse.
Je viens d'essayer ton code (sans le getDraft car je n'en ai pas besoin). Malheureusement, j'ai toujours ce problème. Si je fais une erreur (retourné par le tableau validate), et que je sauvegarde, il me créer une nouvelle entrée. C'est comme si après être passé par la validation, l'id disparaît alors que j'ai pourtant débuggé $this->request et la variable pass contient bien l'id.