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/にアクセスすると以下画面が表示されます。
完了です。
詳細画面作成
- コントローラの編集
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>
以下画面が表示されます。
完了です。

















