CakePHP - 一覧・詳細機能を作成してみた

2010年05月01日

CakePHPで、scaffoldを使用せず、一覧画面を作成してみます。

初期設定

  • テーブルの作成
  • ユーザの管理機能を作成します。以下のSQLを実行してください。 CakePHPの規約でテーブル名は、複数形にします。モデルとコントローラと結び付けるためです。

CREATE TABLE users (
             id INT NOT NULL AUTO_INCREMENT,
             name CHAR(50) NOT NULL,
             age INT NOT NULL,
             PRIMARY KEY (id)
);
  • モデルの作成
  • app/models/以下にuser.phpを作成します。規約によりモデルのファイル名・クラス名は単数系にします。

<?php
class User extends AppModel
{
    var $name = 'User';

}
  • コントローラの作成
  • app/controllers/以下にusers_controller.phpを作成します。規約によりコントローラのファイル名・クラス名は単数系にします。

<?php
class UsersController extends AppController
{
    var $name = 'Users';
}

一覧画面作成

  • コントローラの編集
  • users_controller.phpにinxdexアクションを追加します。「User->find('all')」は
    「select *from users」ということです。

<?php
class UsersController extends AppController
{
    var $name = 'Users';
    function index() {
        $this->set('users', $this->User->find('all'));
    }
}
  • ビューの作成
  • app/veiws/にusersというフォルダを作成し、index.ctpというファイルを作成します。コントローラで定義したアクション名とファイル名は同一にします。

<h1>ユーザ一覧</h1>
<table>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
<th colspan="3">操作</th>
</tr>
<?php foreach ($users as $user): ?>
<tr>
<td><?= $user['User']['id']; ?></td>
<td><?= $user['User']['name']; ?></td>
<td><?= $user['User']['age']; ?></td>
<td><?= $html->link("詳細", "/users/view/".$user['User']['id']); ?></td>
<td><?= $html->link("編集", "/users/edit/".$user['User']['id']); ?></td>
<td><?= $html->link("削除", "/users/destroy/".$user['User']['id']); ?></td>
</tr>
<?php endforeach; ?>
</table>
<p><?= $html->link("新規登録", "/users/add"); ?></p>

http://localhost:8080/cake/users/にアクセスすると以下画面が表示されます。

WS000057.JPG

完了です。

詳細画面作成

  • コントローラの編集
  • users_controller.phpにviewアクションを追加します。Userオブジェクトに渡されたパラメータを代入し、「read」でレコードを取得します。

<?php
class UsersController extends AppController
{
    var $name = 'Users';
    function index() {
        $this->set('users', $this->User->find('all'));
    }

    function view($id) {
        $this->User->id = $id;
        $this->set('user', $this->User->read());
    }
}
<h1>ユーザ詳細</h1>
<table>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
<th>操作</th>
</tr>
<tr>
<td><?= $user['User']['id']; ?></td>
<td><?= $user['User']['name']; ?></td>
<td><?= $user['User']['age']; ?></td>

<td><?= $html->link("編集", "/users/edit/".$user['User']['id']); ?></td>

</tr>
</table>

<p><?= $html->link("戻る", "/users/"); ?></p>

以下画面が表示されます。

WS000056.JPG

完了です。

pageTop
>