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が多くなるのが気になる
あと,やっぱりCakePHPSmartyは微妙
組み込みヘルパーとかのよさがなくなるし,template内でそのtemplate用のデータを整形するとかありえない・・・