FuelPHPでコントローラのメソッド内でリダイレクトするとafter()に来なくてハマる



FuelPHP 1.8を使っています。

FuelPHPでは、before()やafter()というメソッドが用意されており、よく使っています。 そのクラス内のコントローラメソッドが呼ばれる前(before)と後(after)で、呼ばれるというものです。

before()やafter()に関するマニュアルは、コントローラー概要(FuelPHP)ですね。

実際のコードは

大体こんなコードになるかと思います。

あるプロジェクトで、たまたまDB処理とリダイレクト処理が必要となり、このように書きました。

beforeやafterという名前通り、action_hoge()が呼ばれる前にはbefore()でDBトランザクションが開始され、呼ばれた後にはafter()でDBコミットされるだろうと思い、プログラミングをしていたのですが…

試してみるとわかりますが、action_hoge()内で”foo/bar”へリダイレクトされると、after()は呼ばれません。 その結果、「なぜかDB updateが失敗する」という、原因不明のトラブルに見舞われることになりました。 たまたま、「リダイレクトだとafter()に来ない」ということを知っている人が近くにおり、結果的にDBコミットがされないことに気づき、助かりましたが、時間をロスしてしまいました。

「FuelPHPのResponse::redirect()をするとafter()は呼ばれない」というのは覚えておいて損はないと思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • キュア子の紹介

人気記事ランキング