書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
CakePHPのモデルとビューを利用する
CakePHPのモデルを定義して、ビューと組み合わせる方法を説明。また、Formヘルパーを使って入力チェックなどを行う方法も解説する。書籍転載の4本目(書籍内の番号は「95」)。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
CakePHPのモデルは定義しなくても利用できますが、定義することでCakePHPの命名規則とは異なった指定や、入力チェックなどが指定できます。またビューと組み合わせることでフォーム表示なども簡単な記述で値の再現や、エラー表示などを実現することができます。
- 名称: CakePHP
- URL: http://cakephp.org/
- インストール方法: 「【094】MVCフレームワークを使ってアプリケーションを作成する」を参照
モデルの実装
リスト95-1はモデルを定義したコードです。モデルとはデータを管理するクラスであり、通常はデータベースに保存するクラスとなり、雛形を作成した際に作成されたAppModelクラスを継承し(1)、実装します。
// 1モデルの定義
class Info extends AppModel {
// 2設定の選択
public $useDbConfig = 'mook';
// 3テーブル名の指定
public $useTable = 'info';
// 4入力チェック
public $validate = array(
'title' => array(
'rule' => 'notEmpty', // 入力を必須とする
),
'body' => array(
'rule' => 'notEmpty', // 入力を必須とする
)
);
public function getTodayList($num = 10){
// 5条件での一覧取得方法
$opts = array(
'conditions' => array(
'info.created <=' => date('Y-m-d',strtotime("+1 day")),
'info.created >=' => date('Y-m-d')
),
'order' => array('info.created ASC'),
'limit' => $num
);
$data = $this->find('all',$opts);
return $data;
}
}
|
DBの設定はconfig/database.phpにて定義されております。デフォルトでは、database.php内で定義されている$defaultにて定義されている設定を使います。使用する設定を変更したい場合には、$useDbConfigプロパティを使って変更することができます(2)。テーブル名もデフォルトではInfoモデルという名称の場合にはテーブル名がInfosというテーブルになります。デフォルトのテーブル名から変更したい場合には$useTableプロパティに指定すれば(3)、デフォルトのテーブル名から変更することができます。
入力チェックを行う場合には$validateプロパティを設定します(4)。
テーブルでのデータの検索はfindメソッドを利用します。検索条件を指定して複数レコードを取得する場合にはfind('all')のように指定します(5)。それ以外に表95-1の指定がよく利用されます。また、findメソッドの第2引数を使って検索条件が指定できます(表95-2)。
名称 | 説明 |
---|---|
first | 見つかった最初の1件目を取得する |
all | 対象のデータの全件を取得する |
count | 対象のデータ件数を取得する |
名称 | 説明 |
---|---|
condisions | 検索条件の指定(配列で指定) |
fields | 取得するフィールド(配列で指定) |
order | データのソート順 |
limit | データの取得件数 |
offset | データの取得開始件数 |
page | データの何ページから取得するかを指定(offsetが自動的に設定される) |
なお、リスト95-2はテーブルを作成するためのSQLコードです。createdとmodifiedフィールドというフィールドがあるとレコードの新規追加、もしくは更新時に自動的に日時が設定されます。
CREATE TABLE `info`(
`id` int NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL,
`body` text NOT NULL,
`created` datetime NOT NULL, -- insert時に自動的に日時が設定される
`modified` datetime NOT NULL, -- update時に自動的に日時が設定される
PRIMARY KEY(id)
);
|
ビューの実装
リスト95-3はInfoテーブルの一覧を表示するビューファイルです。URLは作成する際には設定によって変わることを考慮し、ビューにはHtmlヘルパがあり、このオブジェクトのurlメソッドにアプリケーションに取っての絶対パスで記述すれば自動的に上位パスも補完するメソッドがあります(1)。ビューテンプレート内ではコントローラ内のsetメソッドを使用して設定した変数をそのまま使えます(2)。
<div>
<!-- 1URLをコントローラとアクションにあわせて作成する -->
<a href="<?php echo $this->Html->url('/info/add'); ?>">新規登録</a>
<hr />
<table>
<!-- 2コントローラでsetした変数を利用する -->
<?php foreach($list as $item){ ?>
<tr>
<td><?php echo h($item['Info']['title']); ?></td>
<td><?php echo h($item['Info']['body']); ?></td>
<td><a href="<?php echo $this->Html->url('/info/del/').$item['Info']['id']; ?>">削除</a>
</tr>
<?php } ?>
</table>
</div>
|
リスト95-4は新規にレコードを追加するためのビューファイルとなります。Formヘルパーを使うとフォームの作成でエラー時の値の再現や、入力チェックなどが行えます。ヘルパーとは、ビューを作成する際に便利な機能を集めたツールであり、サンプルで紹介したヘルパー以外にSessionヘルパーなどがあり、これらのヘルパーはビューを作成する際によく利用します。
<div>
<?php echo $this->Form->create('Info',array('type' => 'post')); ?>
<table>
<tr>
<td>タイトル</td>
<td><?php echo $this->Form->input('Info.title', array('label' => false)); ?></td>
</tr>
<tr>
<td>本文</td>
<td><?php echo $this->Form->textarea('Info.body'); ?></td>
</tr>
</table>
<?php echo $this->Form->end('新規作成'); ?>
</div>
|
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
1. スクレイピング/DOM操作をjQuery風に行う(phpQuery)
Webサイトから情報を抽出する「Webスクレイピング」や、HTML内の各要素にアクセス/操作する「DOM操作」を、phpQueryを使ってjQuery風に行う方法を説明する。書籍転載の1本目(書籍内の番号は「70」)。
2. Webスクレイピングを行う(Goutte)
HTMLから必要なデータを抽出する「Webスクレイピング」を手軽に行えるライブラリ「Goutte」の基本的な使い方を説明する。書籍転載の2本目(書籍内の番号は「88」)。
3. MVCフレームワークを使ってアプリケーションを作成する(CakePHP)
PHPのMVCフレームワークとして人気のある「CakePHP」の基本的な使い方を説明する。書籍転載の3本目(書籍内の番号は「94」)。
4. 【現在、表示中】≫ CakePHPのモデルとビューを利用する
CakePHPのモデルを定義して、ビューと組み合わせる方法を説明。また、Formヘルパーを使って入力チェックなどを行う方法も解説する。書籍転載の4本目(書籍内の番号は「95」)。
5. 高速で軽量なフレームワークFuelPHPを使う
高度なWebアプリ開発に向いている、高速で軽量なフレームワーク「FuelPHP」の基本的な使い方を説明する。書籍転載の5本目(書籍内の番号は「96」)。