Controller内のアクションで、処理が終わったあとにそのページに戻る処理をしてた時のことです。

表示している画面をwebroot内にHTMLファイルで出力するというプログラムを構築し、それをoutputというアクションで作成しました。

処理が終わったあと元の場所に戻るようにしたかったのですが、exit()では真っ白な画面で終わってしまいます。

ならViewではいつもの$this->Url->build()で指定すればよいかとaction内に記述しました。ページ遷移といえばPHPではheader()ですよね。

header('Location: '.$this->Url->build(['Controller' => 'Pages', 'action' => 'index']));
exit();

ところが、エラーが発生しました。

 Call to a member function build() on null

え?ビューで普通につかうものですよ?Controller内では使えないんですか?

ネットで調べるとヘルパーを追加すれば使えるよ、とのことだったので追加してみました。

public $helpers = ['Url'];

しかし、動作は変わらずのエラー表示。header()内にURLを追加するだけなんですが、直接絶対URLを書いてもいずれWebサーバーにアップしてドメイン当てるとまたURL変更するの面倒だなと思って違う形でないか調べました。

するとCakeにはredirectがありました。

return $this->redirect(
  ['controller' => 'Pages', 'action' => 'index']
);
exit();

そういえば、Controllerのaddやeditの中に普通にredirectが記述されていましたねw

うっかりというか、灯台下暗しというか。ちゃんと例はすぐそこにあるもんですね。