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 に設定したコンテンツ(ビューを適用した結果)が入ります。