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'));