CakePHPで確認画面(戻るボタン付き)
CakePHPの面倒なところ
HTML_QuickFormとの連携をしたかったんだけど,PATHを通すあたりとかが
あんまりそぐわないだろうなと思って断念
Smartyと連携しつつCakePHPの書き方とおりにやってみた
- 「戻るボタン」のvalueで状態判定(JavaScriptのhistry.back()は個人的にいただけなかったので)
- 1つのでfunction内で完結
- 3つのtemplateを使用(初期画面,確認画面,完了画面)
尚,確認画面のhiddenの持ち回りは
http://d.hatena.ne.jp/cakephper/20081210/1228850201
さんを利用させていただきました
(3階層以上のデータが考えられないのは最大でもグループ化されたフォームまでっていうこと)
controller
/**
* Add user.
*
* Group of 'admin', or 'manager' are only allowed to use this function.
*
*
* @return void
* @access public
*/
function add()
{
//ACLをここでする
*処理*//POST時の処理
if( $this->data )
{
//validation前にデータの整形をここでする
*処理*//validationを消したい場合ここでする(このやり方は邪道かも)
*処理*$this->User->data = $this->data;
//validation
if( $this->User->validates() )
{
//押されたボタンのvalueを設定
$type = $this->params['form']['btn_type'];switch( $type )
{
//戻るボタンが押されたとき
case 'back':
break;//確認ボタンが押されたとき
case 'confirm':
//templateの指定とデータのセット
$this->set('data', $this->data);
$this->render('add_confirm');
break;//完了ボタンが押されたとき
case 'submit':
//データベースの処理とかここでやる
*処理*
//templateの指定
$this->render('add_submit');
break;
}
}
}
}
view
add.tpl(初期画面)
{assign_assoc var='form_attributes' value='action=>add'}
{$form->create(null, $form_attributes)}{*お好きなフォームをここに書く*}
{*ボタンのvalue設定と設置*}
{assign_assoc var='btn_type' value='name=>btn_type'}
{$form->submit('confirm', $btn_type)}{*確認ボタン*}{$form->end()}
add_confirm.tpl(確認画面)
{assign_assoc var='form_attributes' value='action=>add'}
{$form->create(null, $form_attributes)}{$formhidden->hiddenVars(modelname)}
{*controllerでセットしたdataをここに書く*}
{*ボタンのvalue設定と設置*}
{assign_assoc var='btn_type' value='name=>btn_type'}
{$form->submit('back', $btn_type)}{*戻るボタン*}
{$form->submit('submit', $btn_type)}{*完了ボタン*}{$form->end()}
add_submit.tpl(完了画面)
Success!
思ったこと
1つのcontrollerでこういうfunctionが多くなるのが気になるあと,やっぱりCakePHPでSmartyは微妙
組み込みヘルパーとかのよさがなくなるし,template内でそのtemplate用のデータを整形するとかありえない・・・