CakePHP:基本的な使い方
最終更新日時:2010-07-28 17:30:40
CakePHP
CakePHP
概要
CakePHP を使って実装する基本的な方法を紹介します。
ほとんど本家のチュートリアルと同様です。
CakePHP は MVC モデルに沿った形で実装することになっていますので、モデル/ビュー/コントローラーをそれぞれ実装することで、アプリケーションの実装となります。
モデル
まずはモデルを作成します。
とりあえず、単に以下のようなファイルを作成すればOKです。
<?php class Form extends AppModel { } ?>
これを例えば form というアプリケーションであれば、app/models/form.php というファイル名で作成します。
コントローラー
次にコントローラーを作成します。
コントローラーのファイル名は、form というアプリケーションであれば、app/controllers/forms_controller.php となります。
例えばこんな感じ。
admin=一覧、view=詳細表示、index=フォーム、edit=編集、delete=削除です。
<?php class FormsController extends AppController { function admin() { $this->set('forms', $this->Form->find('all')); } function view($id = null) { $this->Form->id = $id; $this->set('form', $this->Form->read()); } function index() { if (!empty($this->data)) { if ($this->Form->save($this->data)) { $this->flash('送信しました。','/forms'); } } } function edit($id = null) { $this->Form->id = $id; if (empty($this->data)) { $this->data = $this->Form->read(); } else { if ($this->Form->save($this->data['Form'])) { $this->flash('更新しました。','/forms'); } } } function delete($id) { $this->Form->delete($id); $this->flash('削除しました。', '/forms'); } } ?>
ビュー
最後に、コントローラーで作成したメソッドごとにビューのファイルを作成します。
ビューのファイルは、例えば index 用のファイルであれば app/views/forms/index.ctp として作成します。
なお、deleteは画面を持たないので、ビューファイルは作成しません。
以下、作成例です。
admin.ctp
<?php $this->set('title_for_layout', '管理画面'); ?> 問い合わせ一覧<br> <br> <table class="default"> <tr> <th>#</th> <th>項目1</th> <th>項目2</th> <th>項目3</th> <th>項目4</th> <th>項目5</th> <th>作成日時</th> <th>更新日時</th> <th>操作</th> </tr> <?php foreach ($forms as $form): ?> <tr> <td> <?php echo $html->link($form['Form']['id'], "/forms/view/".$form['Form']['id']); ?> </td> <td> <?php echo nl2br($form['Form']['item1']); ?> </td> <td> <?php echo nl2br($form['Form']['item2']); ?> </td> <td> <?php echo nl2br($form['Form']['item3']); ?> </td> <td> <?php echo nl2br($form['Form']['item4']); ?> </td> <td> <?php echo nl2br($form['Form']['item5']); ?> </td> <td><?php echo $form['Form']['created']; ?></td> <td><?php echo $form['Form']['updated']; ?></td> <td> <?php echo $html->link('削除', "/forms/delete/{$form['Form']['id']}", null, '削除しますか?' )?> <?php echo $html->link('編集', '/forms/edit/'.$form['Form']['id']);?> </td> </tr> <?php endforeach; ?> </table> <br> <p> [ <?php echo $html->link('ユーザー登録', '/users/add'); ?> ] </p>
view.ctp
<?php $this->set('title_for_layout', '#' . $form['Form']['id']); ?> 問1:<br> <p><?php echo $form['Form']['item1']?></p> 問2:<br> <p><?php echo $form['Form']['item2']?></p> 問3:<br> <p><?php echo $form['Form']['item3']?></p> 問4:<br> <p><?php echo $form['Form']['item4']?></p> 問5:<br> <p><?php echo $form['Form']['item5']?></p> <p> <small>登録日時: <?php echo $form['Form']['created']?></small><br /> <small>更新日時: <?php echo $form['Form']['updated']?></small><br /> </p> <br /> <?php echo $html->link('トップ', '.'); ?>
index.ctp
<?php $this->set('title_for_layout', '問い合わせ'); echo $form->create(); ?> 問1<br> <?php echo $form->input('item1', array( 'label' => false ) ); ?> 問2<br> <?php echo $form->input('item2', array( 'label' => false ) ); ?> 問3<br> <?php echo $form->input('item3', array( 'label' => false ) ); ?> 問4<br> <?php echo $form->input('item4', array( 'label' => false ) ); ?> 問5<br> <?php echo $form->input('item5', array( 'label' => false ) ); ?> <?php echo $form->end('送信'); ?> <hr> <?php echo $html->link('管理画面へ', 'admin'); ?>
edit.ctp
<?php $this->set('title_for_layout', '編集'); echo $form->create(); echo $form->input('id', array('type'=>'hidden')); ?> 問1<br> <?php echo $form->input('item1', array( 'label' => false ) ); ?> 問2<br> <?php echo $form->input('item2', array( 'label' => false ) ); ?> 問3<br> <?php echo $form->input('item3', array( 'label' => false ) ); ?> 問4<br> <?php echo $form->input('item4', array( 'label' => false ) ); ?> 問5<br> <?php echo $form->input('item5', array( 'label' => false ) ); ?> <?php echo $form->end('変更'); ?>
その他
デフォルトのテンプレートを変えたい場合には、app/views/layouts/default.ctp を作成することにより、変更可能です。
$title_for_layout に設定したタイトルが入り、$content_for_layout に設定したコンテンツ(ビューを適用した結果)が入ります。