CakePHP:基本的な使い方

最終更新日時:2010-07-28 17:30:40
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 に設定したコンテンツ(ビューを適用した結果)が入ります。


お問い合わせは 掲示板 にて。