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

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

MVCフレームワークを使ってアプリケーションを作成する(CakePHP)

2014年8月5日

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

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

書籍転載について

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

 

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

ご注意

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

 CakePHPはMVCフレームワークとして広く使われているフレームワークです。CakePHPは設定作業をほとんどすることなく、アプリケーションを作成できます。

  • 名称: CakePHP
  • URL: http://cakephp.org/
  • インストール方法: Composer でインストール
  • ファイル: autoload.php

インストール

 インストールにはアーカイブファイルをダウンロードする方法とcomposerを使った方法がありますが、本稿ではcomposerを使った方法を紹介します。composer.jsonをリスト94-1のように作成します。

JSON
{
  "name": "example-app",
  "repositories": [
    {
      "type": "pear",
      "url": "http://pear.cakephp.org"
    }
  ],
  "require": {
    "pear-cakephp/cakephp": ">=2.3.4"
  },
  "config": {
    "vendor-dir": "vendor/"
  }
}
リスト94-1 composer.json

 続いて、アプリケーションの雛形を作成します。図94-1はアプリケーション名を「mook」とした場合の実行例です。実行すると、mookというディレクトリ以下にアプリケーションの雛形が作成されます。

コンソール
> .\vendor\bin\cake.bat bake project mook
図94-1 アプリケーションの雛形の作成

 ただし、環境によっては次のようなエラーメッセージが表示されます。

'bash' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

 その場合には、cake.batファイルをリスト94-2のように修正します。

バッチファイル
rem bash "%BIN_TARGET%" %* // 次の行を追加する
cmd /C "%BIN_TARGET%" %*s
リスト94-2 修正内容(cake.bat)

フレームワークの概要

 図94-2はシンプルな機能を実装をした際のフレームワークの構造で、Infoというテーブルにデータを追加、削除、そして表示をするためのプログラムを配置したときの例です。このように、CakePHPではディレクトリに合わせてそれぞれのプログラムを配置するだけで機能するようになっています。

図94-2 MVCとフォルダ構造

図94-2 MVCとフォルダ構造

コントローラ

 コントローラとは、URLでアクセスした際に起動するプログラムです。このプログラムはデフォルトでは図94-3のようなルールで起動されます。したがって、アクセスしたいURLに合わせてコントローラクラスを配置するだけで動作するようになっています。

図94-3 コントローラとURL

図94-3 コントローラとURL

 リスト94-3はコントローラを実装したコードです。最初にAppContollerクラスを継承します(1)。続いて、使用するモデルを宣言します(2)。アクションはpublicメソッドとして定義すると自動的にアクションとして認識されます(3)。したがって、アクションとしたくないメソッドはpublicメソッド以外で定義する必要があります。なお、コントローラでよく利用するメソッドは表94-1のとおりです。

PHP
// 1コントローラクラスの定義
class InfoController extends AppController {

  // 2使用するモデル(テーブル)の定義
  public $uses = array('Info');

  // 3デフォルトのアクション
  public function index(){
    $list = $this->Info->find('all');
    $this->set('list',$list);
    // 4表示するビューの指定
    $this->render('index');
  }

  // 5レコードの追加アクション
  public function add(){
    if(!$this->request->is('post')){
      $this->render('add');
      return;
    }

    $data = array(
      'Info' => array(
        // リクエストパラメータの取得
        'title' => $this->request->data('title'),
        'body' => $this->request->data('body')
      )
    );

    // 6テーブルの追加処理
    $this->Info->save($data);

    // 7メッセージの表示とURLのリダイレクト処理
    $this->Session->setFlash("追加しました");
    $this->redirect('/info/index');
  }

  // レコードの削除アクション
  public function del($id){
    $this->Info->delete($id);
    $this->Session->setFlash("削除しました");
    $this->redirect('/info/index');
  }
}
リスト94-3 InfoController.php
メソッド名説明
render(string) ビューを表示する
set(string,string) ビューに渡す変数を設定する
redirect(string) リダイレクト処理によりページの転送処理
表94-1 コントローラでよく利用するメソッド

 モデルを使用する場合には$this->Infoのように明示的にインスタンスを作成しなくても利用ができ、表示するビューを指定する場合にはrenderメソッドを使用します(4)。renderメソッドを使わなくてもデフォルトではアクション名を引数にして呼ばれますので、アクション名と同じビュー名を指定する場合には省略が可能です。

 新規追加のアクション(5)では、画面遷移時のHTTP GETメソッドと、POSTメソッドで表示されます。したがって、requestオブジェクトのisメソッドを使ってHTTPのメソッド毎に処理を切り分けます。データを追加したら、再び一覧画面に戻るためにredirectメソッドを使って画面遷移します(6)。この際に登録メッセージを遷移先に表示する際には、SessionヘルパのsetFlushメソッドにメッセージを設定します(7)。

※以下では、本稿の前後を合わせて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でつぶやこう!