Transitionコンポーネント1.0をリリースします。
6/19追記:@k1LoWさんが紹介記事を書いてくれました。ありがとうございます!
概要
@k1LoWさんの多大な助力もあり、多くのバグフィックスと新機能の追加がありました。
トータルで89のテストケースがパスし、実践投入が現実的になりましたので、ここに1.0をリリースすることをお知らせします。
ダウンロード
http://github.com/hiromi2424/TransitionComponent/downloads
「1.0」をダウンロードしてください。
主な新機能
- Session->setFlash()のパラメータが全て指定できるように、$flashParamsプロパティが導入されました。(k1LoWさんの提案)
- mergedData()の引数に$callbackがつきました。これによりマージの仕方を好みに変更できます。デフォルトがSet::merge()になりました。(以前はarray_merge_recursive()で、これだとマージがうまく働かなかった)$callbackには、正しいコールバック形式か、'Set::pushDiff'のような文字列を渡すことが出来ます。
- セッションに使う基本のキーが$sessionKeyプロパティで変更できるようになりました。
- checkData()などでモデルにfalseを指定するとモデルバリデーションを行わなくなりました。
- ユーザバリデーションとモデルバリデーションが同時に行えるようになりました。
サンプルコード
全ての機能を使いきるつもりで書き下してみます。
<?php class RegisterController extends AppController { var $components = array( 'Transition' => array( 'automation' => array( 'confirm' => array( 'nextStep' => 'save', 'models' => false, 'validationMethod' => 'validateCaptcha', 'prev' => array('register', 'profile'), 'messages' => array( 'invalid' => '修正が必要な情報があります。各ページに戻って、情報を修正してください。', 'prev' => false, ), ), ), 'messages' => array( 'invalid' => '修正が必要な情報があります。', 'prev' => 'ページの遷移が不正です', ), 'flashParams' => array( 'element' => 'show_error', 'params' => array('class' => 'wizard'), 'key' => 'wizard', ), 'models' => array('User'), 'sessionBaseKey' => 'Wizard', ), ); function register() { $this->Transition->checkData('profile'); } function profile() { $this->Transition->automate('confirm', 'Profile', 'register'); } function confirm() { $this->data = $this->Transition->mergedData(); $User = ClassRegistry::init('User'); $User->create($this->data); $User->validate(); $User->Profile->create($this->data); $User->Profile->validate(); $this->set('captcha', createCaptcha()); } function save() { $this->Transition->checkPrev(array('register', 'profile', 'confirm')); $this->Transition->deleteData('cofirm'); $data = $this->Transition->mergedData('Set::pushDiff'); if (ClassRegistry::init('User')->saveAll($data)) { $this->Transition->clearData(); $this->redirect(array('controller' => 'page', 'action' => 'index')); } else { $this->redirect(array('action' => 'confirm')); } } }
その他
動かないところなどあったらいつでもお知らせください。