書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
MVCフレームワークを使ってアプリケーションを作成する(CakePHP)
PHPのMVCフレームワークとして人気のある「CakePHP」の基本的な使い方を説明する。書籍転載の3本目(書籍内の番号は「94」)。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
CakePHPはMVCフレームワークとして広く使われているフレームワークです。CakePHPは設定作業をほとんどすることなく、アプリケーションを作成できます。
- 名称: CakePHP
 - URL: http://cakephp.org/
 - インストール方法: Composer でインストール
 - ファイル: autoload.php
 
インストール
インストールにはアーカイブファイルをダウンロードする方法とcomposerを使った方法がありますが、本稿ではcomposerを使った方法を紹介します。composer.jsonをリスト94-1のように作成します。
| 
 { 
  "name": "example-app", 
  "repositories": [ 
    { 
      "type": "pear", 
      "url": "http://pear.cakephp.org" 
    } 
  ], 
  "require": { 
    "pear-cakephp/cakephp": ">=2.3.4" 
  }, 
  "config": { 
    "vendor-dir": "vendor/" 
  } 
} 
 | 
続いて、アプリケーションの雛形を作成します。図94-1はアプリケーション名を「mook」とした場合の実行例です。実行すると、mookというディレクトリ以下にアプリケーションの雛形が作成されます。
| 
 > .\vendor\bin\cake.bat bake project mook 
 | 
ただし、環境によっては次のようなエラーメッセージが表示されます。
| 
 'bash' は、内部コマンドまたは外部コマンド、 
操作可能なプログラムまたはバッチ ファイルとして認識されていません。 
 | 
その場合には、cake.batファイルをリスト94-2のように修正します。
| 
 rem bash "%BIN_TARGET%" %* // 次の行を追加する 
cmd /C "%BIN_TARGET%" %*s 
 | 
フレームワークの概要
図94-2はシンプルな機能を実装をした際のフレームワークの構造で、Infoというテーブルにデータを追加、削除、そして表示をするためのプログラムを配置したときの例です。このように、CakePHPではディレクトリに合わせてそれぞれのプログラムを配置するだけで機能するようになっています。
コントローラ
コントローラとは、URLでアクセスした際に起動するプログラムです。このプログラムはデフォルトでは図94-3のようなルールで起動されます。したがって、アクセスしたいURLに合わせてコントローラクラスを配置するだけで動作するようになっています。
リスト94-3はコントローラを実装したコードです。最初にAppContollerクラスを継承します(1)。続いて、使用するモデルを宣言します(2)。アクションはpublicメソッドとして定義すると自動的にアクションとして認識されます(3)。したがって、アクションとしたくないメソッドはpublicメソッド以外で定義する必要があります。なお、コントローラでよく利用するメソッドは表94-1のとおりです。
| 
 // 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'); 
  } 
} 
 | 
| メソッド名 | 説明 | 
|---|---|
| render(string) | ビューを表示する | 
| set(string,string) | ビューに渡す変数を設定する | 
| redirect(string) | リダイレクト処理によりページの転送処理 | 
モデルを使用する場合には$this->Infoのように明示的にインスタンスを作成しなくても利用ができ、表示するビューを指定する場合にはrenderメソッドを使用します(4)。renderメソッドを使わなくてもデフォルトではアクション名を引数にして呼ばれますので、アクション名と同じビュー名を指定する場合には省略が可能です。
新規追加のアクション(5)では、画面遷移時のHTTP GETメソッドと、POSTメソッドで表示されます。したがって、requestオブジェクトのisメソッドを使ってHTTPのメソッド毎に処理を切り分けます。データを追加したら、再び一覧画面に戻るためにredirectメソッドを使って画面遷移します(6)。この際に登録メッセージを遷移先に表示する際には、SessionヘルパのsetFlushメソッドにメッセージを設定します(7)。
※以下では、本稿の前後を合わせて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」)。