とっても便利なTransitionコンポーネント
昨日のブログでもちらっと書いたけど、仕事で便利に使わせてもらっているTransitionコンポーネントについていくつかの記事に分けて書いてみる。本当に便利なのにあまり情報がないのは、みんななんの問題もなくさらっと導入できているからなのかな?
Transitionコンポーネントは id:hiromi2424 さんによるCakePHPのコンポーネントです。
24時間CakePHP:Transitionコンポーネント1.0をリリースします。
このコンポーネントがサポートするのは「入力→確認→完了」という流れの入力部分が複数になるパターン。ウィザード的な流れや項目が多くて複数ページにわたるアンケートとかがそういうものに当てはまると思う。
続きを読むTransitionコンポーネント - checkData() について
Transition#checkData は複数入力画面の1画面目で使用することになるメソッドです。
CakePHPでは以下のようなパターンのコードをよく書くと思う。同一アクションでGET/POSTで処理をわけて、POSTできたときは保存してリダイレクトみたいな感じ。
class FooController extends AppController { public $uses = 'Foo'; public function add() { if (!empty($this->data)) { (POSTデータがきたときの処理) } (GETでデータがきた場合でも実行する処理) } }続きを読む
Transitionコンポーネント - automate() について
checkData/checkPrevに続いて Transition#automate ですが、これまたおおざっぱにいうと checkPrev した後に checkData をしてくれるメソッドになります。
続きを読むちなみに・・・
PHPMatsuriで断念したアプリは以下のような仕様だったんですよね・・・
- 入力画面毎にactionを準備するんではなく、入力画面は1つのactionでうけて、たとえばform→confirm→add のように3つのアクションだけで処理する
- 管理画面で自由に画面数を決めて、入力項目も各画面に自由に配置する
- 入力画面のstepの切り替えはGETのパラメータで行う
で、なんで実現できないかというとセッションのキーがアクション名だから。まぁがんばって拡張すれば、キーをuriにしたりできたんだろうけど、気がついたのが朝の6時だったから(管理ツールを先に作ったためにこの部分が判明したのが最後の最後だった・・・)心が折れちゃったんですよね・・・
まぁ、そこでコードをしっかり読んだのでこんな記事が書けたんですけどね。まぁ、よしとしよう。