Redirection à la page précédente

Par Prescillia Nierichlo, il y a 12 ans


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

Lartak, il y a 12 ans

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.

Prescillia Nierichlo, il y a 12 ans

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

FredXD, il y a 12 ans

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, il y a 12 ans

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

Prescillia Nierichlo, il y a 12 ans

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

Prescillia Nierichlo, il y a 12 ans

Merci ! Vos deux solutions fonctionnent en tout cas !