6月 04
11.確認画面(1)
まず、確認画面のビューを作ります。
bake で自動生成した、 view.ctp がそのまま使えそうなので、 view.ctp を開いてから「名前を付けて保存」で confirm.ctp を作成します。
今回確認画面はhidden方式でいくので、
<div class="members view">
となっている所の、直下にフォームを作ります。
<?php echo $form->create('Member', array('id'=>'MemberConfirm')); ?>
こんな感じで。
ただの
$form->create('Member');
だけでもいいっちゃいいんですが、そうすると、以下のような add の画面と全く同じ id でフォームタグが生成されてしまうので、
<form id="MemberAddForm" method="post" action="/~bob/cake/index.php/members/add">
これはなんとなく気持ち悪いので、
array('id'=>'MemberConfirm')
を指定して、確認画面用のフォームの id を指定しておきます。
で、 add.ctp のフォーム部分、
<?php
echo $form->input('email');
echo $form->input('password');
echo $form->input('type_id');
echo $form->input('birthday');
echo $form->input('img1');
echo $form->input('img2');
echo $form->input('Favorite');
?>
をごっそりそのままコピーして貼り付けます。
hidden にするので
array('type'=>'hidden')
を一個一個全部に指定して、一応全体を fieldset で囲んでおきます。
こんな感じになりました。
<fieldset style="display:none;">
<?php
echo $form->input('email', array('type'=>'hidden'));
echo $form->input('password', array('type'=>'hidden'));
echo $form->input('type_id', array('type'=>'hidden'));
echo $form->input('birthday', array('type'=>'hidden'));
echo $form->input('img1', array('type'=>'hidden'));
echo $form->input('img2', array('type'=>'hidden'));
echo $form->input('Favorite', array('type'=>'hidden'));
?>
</fieldset>
ただ、アクションとしては同じ add で処理するので、なにかで識別するようにしないと「今は確認画面だ!」というのが分かりません。
ということで、 mode = ‘confirm’ というのを作り出して、これを add.ctp (フォーム入力画面)の方に、 hidden で入れておきます。
add.ctp 側
<fieldset style="display:none;"><?php echo $form->hidden('mode', array('value'=>'confirm')); ?></fieldset>
confirm.ctp 側はvalueなしで。以下を追加。
echo $form->input('mode', array('type'=>'hidden','value'=>''));
これで、
- add → confirm へは mode = ‘confirm’ で、
- confirm → complete へは mode = ” で
行く事になります。
最後に、フォームを閉じておきます。
<div class="submit"><?php echo $form->button('戻る',array('id'=>'back'));?></div>
<?php echo $form->end('送信');?>
これはどっか適当に下の方に入れておきます。
ま、付けたくはないですが、「戻るボタンを付けろ」、と必ず言われるので、一応ただの id=”back” ボタンをつけておきます。
あと、view.ctp との違いで、そっちには id がありますが、こっちにはまだ id は決まっていない、存在していないので、以下の id に関する表示部分を削除しておきます。
<tr>
<td><?php __('Id'); ?></td>
<td>
<?php echo $member['Member']['id']; ?>
</td>
</tr>
同様に、 Created と Modified も要らないので削除しておきます。
ここでもうそろそろ画面を見たいのでコントローラをいじります。
/app/controllers/members_controller.php を開いて、function add() の以下の部分、
if (!empty($this->data)) {
$this->Member->create();
if ($this->Member->save($this->data)) {
$this->Session->setFlash(__('The Member has been saved', true));
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash(__('The Member could not be saved. Please, try again.', true));
}
}
この1行目からのif文の中にさらにもう一個if文を入れて、もとからあった部分はelseのあとにつっこみます。
構造としてはこんな感じ。
if (!empty($this->data)) {
if () {
} else {
// もとからあった部分
}
}
で、その新しいif文を以下のようにします。
if (!empty($this->data)) {
if ($this->data['Member']['mode'] == 'confirm') {
$this->Member->set($this->data);
$this->set('member', $this->data);
$this->render('confirm');
} else {
$this->Member->create();
if ($this->Member->save($this->data)) {
これで確認画面が出るはずなのでブラウザで
http://localhost/~bob/cake/index.php/members/add
を開いて適当に入力して進むと・・・
ぼこぼこにエラーが出てますが、入力したEmailの値とかは表示されてるはずです。
エラーは配列とかの問題だけなので気にしなくていいです。
