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()は呼ばれない」というのは覚えておいて損はないと思います。

ITエンジニア募集中!

キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。

下記よりITエンジニア募集の採用情報をご覧いただけます。


コメントを残す

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

CAPTCHA