Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

CakePHPのモデルとビューを利用する

2014年8月5日

CakePHPのモデルを定義して、ビューと組み合わせる方法を説明。また、Formヘルパーを使って入力チェックなどを行う方法も解説する。書籍転載の4本目(書籍内の番号は「95」)。

WINGSプロジェクト 小林 昌弘
  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『PHPライブラリ&サンプル実践活用[厳選100]』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『PHPライブラリ&サンプル実践活用[厳選100]』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

 CakePHPのモデルは定義しなくても利用できますが、定義することでCakePHPの命名規則とは異なった指定や、入力チェックなどが指定できます。またビューと組み合わせることでフォーム表示なども簡単な記述で値の再現や、エラー表示などを実現することができます。

モデルの実装

 リスト95-1はモデルを定義したコードです。モデルとはデータを管理するクラスであり、通常はデータベースに保存するクラスとなり、雛形を作成した際に作成されたAppModelクラスを継承し(1)、実装します。

PHP
// 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;
  }
}
リスト95-1 モデルの定義(Info.php)

 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 対象のデータ件数を取得する
表95-1 よく利用するfindメソッドに指定できる検索形式
名称説明
condisions 検索条件の指定(配列で指定)
fields 取得するフィールド(配列で指定)
order データのソート順
limit データの取得件数
offset データの取得開始件数
page データの何ページから取得するかを指定(offsetが自動的に設定される)
表95-2 よく利用するfindメソッドに指定できるオプション

 なお、リスト95-2はテーブルを作成するためのSQLコードです。createdとmodifiedフィールドというフィールドがあるとレコードの新規追加、もしくは更新時に自動的に日時が設定されます。

SQL
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-2 Info.sql

ビューの実装

 リスト95-3はInfoテーブルの一覧を表示するビューファイルです。URLは作成する際には設定によって変わることを考慮し、ビューにはHtmlヘルパがあり、このオブジェクトのurlメソッドにアプリケーションに取っての絶対パスで記述すれば自動的に上位パスも補完するメソッドがあります(1)。ビューテンプレート内ではコントローラ内のsetメソッドを使用して設定した変数をそのまま使えます(2)。

HTML+PHP
<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-3 index.ctp
図95-1 実行画面(一覧)

 リスト95-4は新規にレコードを追加するためのビューファイルとなります。Formヘルパーを使うとフォームの作成でエラー時の値の再現や、入力チェックなどが行えます。ヘルパーとは、ビューを作成する際に便利な機能を集めたツールであり、サンプルで紹介したヘルパー以外にSessionヘルパーなどがあり、これらのヘルパーはビューを作成する際によく利用します。

HTML+PHP
<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>
リスト95-4 add.ctp(レコード追加)
図95-2 実行画面(追加フォーム)

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
1. スクレイピング/DOM操作をjQuery風に行う(phpQuery)

Webサイトから情報を抽出する「Webスクレイピング」や、HTML内の各要素にアクセス/操作する「DOM操作」を、phpQueryを使ってjQuery風に行う方法を説明する。書籍転載の1本目(書籍内の番号は「70」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
2. Webスクレイピングを行う(Goutte)

HTMLから必要なデータを抽出する「Webスクレイピング」を手軽に行えるライブラリ「Goutte」の基本的な使い方を説明する。書籍転載の2本目(書籍内の番号は「88」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
3. MVCフレームワークを使ってアプリケーションを作成する(CakePHP)

PHPのMVCフレームワークとして人気のある「CakePHP」の基本的な使い方を説明する。書籍転載の3本目(書籍内の番号は「94」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
4. 【現在、表示中】≫ CakePHPのモデルとビューを利用する

CakePHPのモデルを定義して、ビューと組み合わせる方法を説明。また、Formヘルパーを使って入力チェックなどを行う方法も解説する。書籍転載の4本目(書籍内の番号は「95」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
5. 高速で軽量なフレームワークFuelPHPを使う

高度なWebアプリ開発に向いている、高速で軽量なフレームワーク「FuelPHP」の基本的な使い方を説明する。書籍転載の5本目(書籍内の番号は「96」)。

サイトからのお知らせ

Twitterでつぶやこう!