Bonjour voici mon dilemme,

voilà ma fonction edit dans la parti admin :

function admin_edit($id= null){
if($this->request->is('put') || $this->request->is('post') ){
if ($this->Post->save($this->request->data)){
$this->Session->setFlash('La page a bien été modifiée','notif');

$this->redirect(array('action'=>'acc'));
}
}
seulement j'ai plusieurs partie dans mon administration selon la page que je modifie, avec cette fonction je reviens toujours à la page accueil alors que je voudrais que pour chaque page après édition revenir sur celle-ci (ex: page présentation j'édite un article et j'envoie et il me renvoie sur présentation).
J'ai essayé $this->referer(); mais ça reste sur la même page et idem pour $this->redirect($this->referer());.

Auriez vous une solution? je n'ai pas envie de créer 10 pages edit différente pour la même fonction juste à cause de la redirection...

Merci d'avance !

6 réponses


FredXD
Réponse acceptée

Un truc du genre non?
J'ai repris le code que tu avais mis dans ton 1er post ^^

function admin_edit($id= null){
    $this->Session->write('referer', $this->referer());
    if($this->request->is('put') || $this->request->is('post') ){
        if ($this->Post->save($this->request->data)){
            $this->Session->setFlash('La page a bien été modifiée','notif');
            $this->redirect($this->Session->read('referer'));
        }
    }
}

J'ai pas tester hein pais c'est ce que Lartak t'as plus ou moins indiqué ;)

Lartak
Réponse acceptée

Bonjour.
C'est presque ça <u>Fredix</u> , sauf qu'un peu plus de code ne serait pas du luxe, en reprenant ton code, je ferais comme ceci.

public function admin_edit($id= null){
    if(!this->Session->read('referer')){ /* On vérifie si la variable n'est pas déjà présente dans la session 
pour éviter d'écraser une valeur déjà existante en cas de problème dans la sauvegarde ou au cas ou l'utilisateur 
rafraîchisse la page d'édition et qu'il n'y ai donc aucune donnée postée. */
        $this->Session->write('referer', $this->referer());
    }
    if($this->request->is('put') || $this->request->is('post') ){
        if ($this->Post->save($this->request->data)){
            $this->Session->setFlash('La page a bien été modifiée','notif');

            $this->redirect($this->Session->read('referer'));
            $this->Session->delete('referer'); /* Tout s'est bien passé, on supprime la variable de la session. */
        }
    }
}

Je n'ai pas testé si le referer récupéré serait le bon, mais dans le cas contraire, tu sais déjà comment orienter tes recherches

Bonjour.
C'est normal que le $this->referer() te renvoi sur la page d'édition, étant donné que c'était l'action sur laquelle tu étais avant de soumettre ton formulaire.
Ce qu'il te faut faire, c'est de stocker le referer lorsque tu accèdes à ta fonction edit dans une variable ou dans la session (par exemple) et injecter la valeur dans ton redirect lorsque la requête SQL s'est bien effectuée.

Je comprend ce que tu veux dire... Mais je débute et je ne vois pas du tout comment faire :( c'est pour mon stage de fin de DUT

je teste ça dès lundi ! Merci ! (désolé pour le temps de réponse vacance oblige :p )

Merci ! Vos deux solutions fonctionnent en tout cas !