cakephp3 で更新の後、2つ前のページ(=つまり編集画面に来る前)
A.一覧画面(もしくは他の画面) → B.編集画面(編集)更新ボタン押す → C.edit()アクションで更新、Aに戻す。
というふうなことを普通にBakeでCRUDでつくるとIndexに戻すだけでOKなのですが、別の不特定多数のペ0−字へ戻す場合の話。
A > B > Cの時点での referer()は、Bとなっていて同じページなってしまう。そこで実質2つ前に戻してたい。 解決砲。ControllerのafterFileterで2つ前のページをSessionに入れておく。
まずAppControllerにafterFileterを追加。(beforeFileterの逆で書くActionの後に実行される)
public function afterFilter(Event $event)
{
$this->Session = $this->request->session();
$this->Session->write('referer2',$this->referer());
return parent::afterFilter($event);
}
とすることで、Cのedit()アクション時点では referer2が更新前で、2つ前のAのアドレスがある。
のでedit()アクションで更新の後以下のようにすればできた。
return $this->redirect($this->Session->read('referer2'));
コメントを残す