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

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

高速で軽量なフレームワークFuelPHPを使う

2014年8月12日

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

WINGSプロジェクト 片渕 彼富
  • このエントリーをはてなブックマークに追加

書籍転載について

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

 

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

ご注意

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

 FuelPHPは、PHP 5.3以上を対象に開発された高速で軽量なフレームワークです。既存のPHPフレームワークの長所を継承しつつ、規約より設定を重視して設計されていますので、複雑な設定ファイルに悩まされることはありません。そのため、フレームワークのルールに縛られて開発作業が制限されるということがあまりなく、高度なWebアプリケーションの開発に向いていると期待されています。

  • 名称: FuelPHP
  • URL: http://fuelphp.com/
  • インストール方法: curl get.fuelphp.com/oil | sh

インストール

Linux/Mac OSXの場合

 FuelPHPのインストールは次のようにコマンドラインより行います。

コンソール
# curl get.fuelphp.com/oil ¦ sh

Windowsの場合

 FuelPHP本家サイトのDownloadリンクより最新版(fuelphp-1.7.1.zip)をダウンロードしてアーカイブを解凍します。解凍後のfuelphp-1.7.1のディレクトリ一式をfuelphp-1.7.1/publicがドキュメントルートになるようにWebサーバに配置します。

FuelPHPの基本的な使い方

 FuelPHPは、既存のPHPフレームワークの長所を数多く採用したPHP5.3以上を対象にしたフレームワークです。2011年に最初のバージョンが公開され、PHPフレームワークの中では比較的新しい部類に入ります。フレームワークの構成はMVCモデルを採用し、他のフレームワークに比べて規約が少ないため、非常に使いやすいです。FuelPHPの特徴をまとめると次のようになります。

  • 設定ファイルでの細かな指定がなく、ディレクトリとクラス名で役割を指定
  • 必要なクラスを自動で呼び出すオートローダーが実装されており、require文/include文が不要
  • Controllerからロジックを分離するViewModelの仕組みがあり、ソースコードの肥大化を防止
  • 上記のとおりシンプルな構成のため、動作が高速

 非常にわかりやすいフレームワークで細かな設定ファイルがない反面、MVCの役割を担うクラスには命名規則があり、命名規則は必ず守る必要があります。

 また、MVCモデルを採用したフレームワークでは、Model/Viewに対する複雑な処理をControllerやModelのソースコードに記述してしまうことがあります。そのような場合、1ファイルごとのソースコードが大きくなりすぎて、システムの品質が落ちてしまったり、メンテナンスに手間がかかってしまうことがあります。

 FuelPHPでは、ViewModelというViewやModelに対する処理をControllerから分離する仕組みがあります。そのため、Controllerはリクエストの処理やバリデーションに専念することができ、本来の役目以外の処理をソースコードに記述せずに済みます。まとめると図96-1のようになります。

図96-1 FuelPHPの構成

図96-1 FuelPHPの構成

 FuelPHPを使ったシステム開発では、MVCモデルの概念に沿った開発が可能となり、出来上がったシステムの品質の面でも優れたものとなります。図96-2aと2bの2つのサンプルを作成しながらFuelPHPの基本的な使い方について説明します。

図96-2a 作成するサンプル: データの一覧表示

http://localhost/sample/index

図96-2a 作成するサンプル: データの一覧表示
図96-2b 作成するサンプル: データの登録とバリデーション

http://localhost/sample/form

図96-2b 作成するサンプル: データの登録とバリデーション

送信先:http://localhost/sample/save

プロジェクトを生成する

 FuelPHPでは、開発するアプリケーションをプロジェクトという単位で扱います。プロジェクトのひな型を生成する手順は、OSによって異なります。

Linux/Mac OSXの場合

 次のコマンドでプロジェクトを生成できます。

コンソール
# oil create [プロジェクト名]

Windowsの場合

 Windowsの場合は、コマンドでのプロジェクト生成がサポートされていませんので、インストールの際にダウンロードしたアーカイブをコピーしてプロジェクトのひな型とします。

 プロジェクト配下のディレクトリ構成は、図96-3のようになっており、APPPATHにクラスを作成してアプリケーションを開発します。

図96-3 プロジェクトのディレクトリ

図96-3 プロジェクトのディレクトリ

Controller

 Controllerは、APPPATH/classes/cntrollerに配置します。クラスを作成する際の命名規則はリスト96-1のとおりです

PHP
class Controller_ディレクトリ名_ディレクトリ名_クラス名 extends Controller
リスト96-1 Controllerクラス作成の命名規則

 必ずControllerクラスを継承し、APPPATH/classes/cntrolerからクラスファイルまでのディレクトリを1文字目を大文字にして「_」でつないで最後にクラス名を1文字目を大文字にして命名します。APPPATH/classes/cntroler直下にクラスを配置する場合は、ディレクトリ名はつけずにそのままクラス名で構いません。

 URLからコントローラを呼び出す際には、/ディレクトリ名/クラス名/メソッド名/パラメータ となり、その関係は図96-4のとおりです。

図96-4 URLとクラスの関係

図96-4 URLとクラスの関係

 ディレクトリ名、クラス名、メソッド名までつなげて、パラメータがある場合はパラメータも記載します。パラメータはそのままメソッドの引数となります。メソッド名がindexの場合は、メソッド名を省略することもできます。サンプルの例であれば、入力画面を表示するURLはhttp://localhost/sample/formとなります。

 リスト96-2は作成するサンプルのデータベース内のusersテーブルの一覧を表示/フォームによる登録を行うコントローラのコードです。

 クラス定義を行った後、index(一覧)、form(入力)、save(保存)の各メソッドを定義します(1)。

 一覧を表示するaction_indexメソッドでは、O/RマッパーのModel_Userクラスのfind_allメソッドで、全レコードを取得し、Viewに渡します(2)。Viewは、Viewクラスのforgeメソッドに、テンプレートとなるファイルと表示する変数を渡します。変数は配列の形式で渡します。

PHP
// 1クラス定義
class Controller_Sample extends Controller{
  // 2一覧を表示するindexメソッドを定義
  public function action_index(){
    $data = array();
    $data['rows'] = Model_User::find_all(); // userテーブル内の全レコードをビューに渡す
    return View::forge('sample/list', $data); // テンプレートと変数を渡してViewを生成
  }

  // 3入力画面を表示
  public function action_form(){
    return View::forge('sample/form'); // テンプレートを指定
  }

  // 4Formで送信されたデータを保存
  public function action_save(){
    // 5バリデーション定義
    $validation = Validation::forge();
    $validation->add('name', 'お名前')->add_rule('required'); // 名前の入力を必須に
    $validation->add('email', 'email')->add_rule('required'); // メールの入力を必須に
    $validation->add('age', 'Number')
      ->add_rule('required')
      ->add_rule('valid_string', array('numeric')); // 年齢の入力は必須かつ数値

    if (Input::post()) {
      // 6バリデーションOK時の処理
      if ($validation->run()) {
        $form = array();
        $form['name'] = Input::post('name'); // パラメータを取得テーブル
        $form['email'] = Input::post('email'); // テーブルのカラムと値がセットになるように
        // 7O/Rマッパー
        $user = Model_User::forge();
        $user->set($form); // カラムに値をセット
        $user->save(); // 保存
        // 8sample/indexを実行し、画面に表示
        echo Request::forge("sample/index")->execute();
        exit;
      }else{
        // 9エラーがあるときは入力画面に戻す
        $view = View::forge('sample/form');
        $view->set('errors', $validation->error());
      }
    }
    return $view;
  }
}
リスト96-2 APPPATH/classes/controller/sample.php

 入力画面(図96-5)を表示するaction_formメソッドは、とくに渡すデータはないのでテンプレートのみでViewを生成します。

図96-5 生成した入力画面

図96-5 生成した入力画面

 入力された値を保存するaction_saveメソッド(4)では、まず入力画面のバリデーションを行います(5)。バリデーションを定義するValidationクラスのインスタンスを生成し、addメソッドでformの項目を指定、add_ruleメソッドでバリデーションを行う際の条件を指定します。バリデーションの条件が複数存在する場合は、add_ruleメソッドで続けて指定します。

 バリデーションはrun()メソッドで実行でき、通過したかどうかはtrue/falseで得られます(6)。通過した場合は、O/Rマッパーのインスタンスを生成し、formから受け取った値を保存します(7)。その後、sample/indexのアクションを実行し、一覧画面を表示します(8)。バリデーションを通過しない場合は、戻すビューを指定して、バリデーションのエラーメッセージを渡します(9)。

 FuelPHPの特徴として、クラスを初期化する際にはforgeメソッドが利用されることが多いです。

 リスト96-3は既定で呼び出されるアクションとメソッドを定義する例です。APPPATH/classes/cntroler/route.phpに記述します。

PHP
return array(
  '_root_' => 'sample/index',
);
リスト96-3 APPPATH/classes/cntroler/route.php

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

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

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

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

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

5. 【現在、表示中】≫ 高速で軽量なフレームワークFuelPHPを使う

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

6. FuelPHPで画面を表示する/DBを利用する

FuelPHPが提供する「HTMLを生成するのに便利なメソッド」や「DBの利用時にSQLを記述せずにCRUD操作が行えるクラス」について解説する。書籍転載の6本目(書籍内の番号は「97」)。

7. PDF文書を動的に生成する(FPDF)

PHPスクリプトからPDF文書を動的に生成できるFPDFの基本的な使い方を説明する。書籍転載の7本目(書籍内の番号は「29」)。

サイトからのお知らせ

Twitterでつぶやこう!