書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
高速で軽量なフレームワークFuelPHPを使う
高度なWebアプリ開発に向いている、高速で軽量なフレームワーク「FuelPHP」の基本的な使い方を説明する。書籍転載の5本目(書籍内の番号は「96」)。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは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のようになります。
FuelPHPを使ったシステム開発では、MVCモデルの概念に沿った開発が可能となり、出来上がったシステムの品質の面でも優れたものとなります。図96-2aと2bの2つのサンプルを作成しながらFuelPHPの基本的な使い方について説明します。
送信先:http://localhost/sample/save
プロジェクトを生成する
FuelPHPでは、開発するアプリケーションをプロジェクトという単位で扱います。プロジェクトのひな型を生成する手順は、OSによって異なります。
Linux/Mac OSXの場合
次のコマンドでプロジェクトを生成できます。
# oil create [プロジェクト名]
|
Windowsの場合
Windowsの場合は、コマンドでのプロジェクト生成がサポートされていませんので、インストールの際にダウンロードしたアーカイブをコピーしてプロジェクトのひな型とします。
プロジェクト配下のディレクトリ構成は、図96-3のようになっており、APPPATHにクラスを作成してアプリケーションを開発します。
Controller
Controllerは、APPPATH/classes/cntrollerに配置します。クラスを作成する際の命名規則はリスト96-1のとおりです
class Controller_ディレクトリ名_ディレクトリ名_クラス名 extends Controller
|
必ずControllerクラスを継承し、APPPATH/classes/cntrolerからクラスファイルまでのディレクトリを1文字目を大文字にして「_」でつないで最後にクラス名を1文字目を大文字にして命名します。APPPATH/classes/cntroler直下にクラスを配置する場合は、ディレクトリ名はつけずにそのままクラス名で構いません。
URLからコントローラを呼び出す際には、/ディレクトリ名/クラス名/メソッド名/パラメータ となり、その関係は図96-4のとおりです。
ディレクトリ名、クラス名、メソッド名までつなげて、パラメータがある場合はパラメータも記載します。パラメータはそのままメソッドの引数となります。メソッド名が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メソッドに、テンプレートとなるファイルと表示する変数を渡します。変数は配列の形式で渡します。
// 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-5)を表示するaction_formメソッドは、とくに渡すデータはないのでテンプレートのみでViewを生成します。
入力された値を保存する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に記述します。
return array(
'_root_' => 'sample/index',
);
|
※以下では、本稿の前後を合わせて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」)。