FuelPHPの使い方

FuelPHPは、後発のフレームワークであり、いろいろなPHPフレームワークの長所を生かしています(いいとこ取りなのです)。

PHP5.3以上を対象に開発された高速で軽量なフレームワークです。

FuelPHPの特徴

PHPのWebフレームワークのFuelPHPの代表的な3つの特徴を紹介していきます。

HMVCアーキテクチャを採用

前述したHMVCは「Hierarchical Model View Controller」の略称です。

階層モデルビュートコントローラーであり、ソフトウェアアーキテクチャパターンの1種となっています。

HMVCアーキテクチャを採用していることによるメリットはコンテンツ構造のウィジェット化が可能であることです。

例えばコメント・評価・TwitterやブログのRSSフィード表示・eコマースWebサイトのショッピングカートコンテンツをウィジェットとして表示できます。

Auth パッケージによる認証システム

Authパッケージによる認証システムを採用しています。AuthパッケージはFuelPHPにおける標準化された認証インターフェースを提供し、ユーザーは自分自身で新しいドライバを書くことが可能です。

また基本的なメソッドを保つことで、古いコードに新しいドライバを簡単に統合できます。

Authパッケージには、以下の2つのドライバが含まれており、1つ以上のデータベースのテーブルを使用します。

Simpleauth
Ormauth

設定よりも規約(小・中小規模システム向き)

FuelPHPは規約よりも設定というコンセプトを元に設計されています。

規約が少ないため、コーディング量は他のフレームワークと比較して多いです。

しかし柔軟で自由度の高いコーディングが可能で、覚えるべき規約が少ないため、学習コストが低くなっています。

ただコーディング規約が少ない分、他のフレームワークと比較して、コードの統一性を取るのが難しいです。

大規模ではなく小・中規模システムの開発に向いたフレームワークといえるでしょう。

HMVCとは?

MVCじゃなくてなんで、「HMVC」って思われませんか?

HMVCは、”Hierarchical Model View Controller”の略です。

Hierarchical の和訳は”階層的”です。

説明しますと「MVC構造を機能毎にモジュール分割(フォルダ分け)して階層化したものをmodulesファルダーヘ配置することにより別のモジュールを呼べるようになった」ってことです。

MVCについておさらいすると、

  • Modelは主にメインの処理を記述したり、データの連携を行います。
  • ViewはHTMLに出力する処理を行います。
  • ControllerはModelからのリクエストを処理してViewに反映する処理を行います。

実際の個々のphpファイルの配置先は下記の「ディレクトリ構成」となります。

ディレクトリ構成

/ HMVCを利用したディレクトリ構成
fuelphp
┣ docs                 …公式ドキュメント英語版
┣ fuel
┃  ┣ app               …アプリケーションを配置
┃  ┃ ┣ cache           … キャッシュフォルダ
┃  ┃ ┣ classes         … クラスを配置
┃  ┃ ┃ ┣ controller   … コントローラを配置
┃  ┃ ┃ ┣ model        … モデルを配置
┃  ┃ ┃ ┗ view         … ビューモデルを配置
┃  ┃ ┣ config          … 設定ファイルを配置
┃  ┃ ┣ lang            … 言語ファイルを配置
┃  ┃ ┣ logs            … ログフォルダ
┃  ┃ ┣ migrations      … マイグレーションファイルを配置
┃  ┃ ┣ modules         … モジュールを配置
┃  ┃ ┣ tasks           … タスクを配置
┃  ┃ ┣ tmp             … tmpフォルダ
┃  ┃ ┣ vendor          … サードパーティライブラリを配置
┃  ┃ ┗ views           … ビューを配置
┃  ┣ core              … FuelPHPの本体
┃  ┣ packages          … FuelPHPのパッケージ
┃  ┗ vendor            … サードパーティー
┗ public               … Web公開領域

このapp以下で作業を行います。

controller、model、viewsフォルダが、まさにMVCモデルの、Model、View、Controllerのことです。

ViewModelは、viewフォルダー配下に置きます。

スキャフォールド(scaffold)

CakePHPフレームワークにもscaffoldは採用されております。

スキャフォールド(scaffold)とは、「CRUD(Create, Read, Update, Delete)操作を行うMVCモデルの枠組み(足場)を自動で一括生成する機能」です。

FuelPHPでは、「oil g scaffold」のコマンドを実行することで、モデル、ビュー、コントローラ、マイグレーションの各ファイルが一括で作成されます。

コマンド例)

#scaffoldコマンドで、商品管理できるページを指定します。
php oil g scaffold syouhin cd:int name:varchar[50]
#DBにテーブル作成を反映するため、マイグレーションを実行します。
php oil refine migrate

syouhinは商品マスタテーブル名でcd=商品CD,name商品名です。

この名前でモデル、ビュー、コントローラ、マイグレーションの各ファイルが一括で作成されます。

”php oil refine migrate”

は実際のテーブルを生成する(マイグレーション)コマンドなのです。

簡単です。

見やすい公式ドキュメント

image3_fuelphp3


http://fuelphp.jp/

FulePHPの公式ドキュメントは充実されており判りやすく書かれております。

公式ドキュメントが和訳のままで意味が不可解でしたら使う気になれませんよね。

FuelPHP公式ドキュメントは日本人がしっかりと書かれております。

『FuelPHP』の公式ドキュメントは非常に見やすく設計されています。

FuelPHPのインストール方法

FuelPHPのインストール方法は簡単です。

Windowsの場合とLinuxとMacの場合で異なるため、それぞれに分けて解説します。

Windows

FuelPHPのサイトのDownloadリンクより最新版(fuelphp-1.8.zip)をダウンロードしましょう。

その後、アーカイブを解凍してください。解凍後のfuelphp-1.8のディレクトリ一式をfuelphp-1.8/publicがドキュメントルートになるようにWebサーバに設置します。

Linux/Mac

LinuxやMacの場合は、ターミナルのコマンドラインより行います。

以下のように入力してください。

1.# curl get.fuelphp.com/oil ¦ sh
2.# oil create <ディレクトリ名>

CRUD作成のメモ

まずは練習にCRUD(create,read,update,insert)環境を作ることにした時のメモです。
フレームワーク自体はfuelのgitで管理することを目的とします。

環境

  • centos6.3
  • fuelPHP1.5.3

事前準備に必要なもの

  • php5.3以上
  • mysql

参考にしたサイト

公式サイトからFuelPHPを取得する

公式サイトにいってDownloadボタンをポチッと押して展開したいディレクトリでunzipする。
(今回はlo.fuel.master.orgってディレクトリにDLしたfuelPHPを展開する)
公式では

# oil を Web からクイックインストールします
$ curl get.fuelphp.com/oil | sh
# oil が、たった今、インストールされました。Sites ディレクトリで blog プロジェクトを作ります
$ cd Sites/
$ oil create blog

上記のような形で記載されていますが、これをすると/usr/local/binにoilコマンド(genarateコマンド)がインストールされてしまうので複数のfuelPHPをローカル運用するときに困りそうなのでDLしてくることにしました。

構成はこんな感じ

lo.fuel.master.org/ #fuelPHP本体の落とし先(適時自分の環境に読み替えてください)
| docs/
| fuel/
| public/
| | assets/
| | index.php #ドキュメントルート
| CHANGELOG.md
| CONTRIBUTING.md
| README.md
| TESTING.md
| build.xml
| oil

core,packageをgitでサブモジュール化する

FuelPHP自体のアップデート時に対応できるように一旦落としたcore,packageを削除します。

cd lo.fuel.master.org
rm -rf fuel/core fuel/packages
mkdir fuel/packages

git(submodule)を実行する

cd lo.fuel.master.org

git submodule add git://github.com/fuel/core.git fuel/core
git submodule add git://github.com/fuel/oil.git fuel/packages/oil
git submodule add git://github.com/fuel/auth.git fuel/packages/auth
git submodule add git://github.com/fuel/parser.git fuel/packages/parser
git submodule add git://github.com/fuel/orm.git fuel/packages/orm
git submodule add git://github.com/fuel/email.git fuel/packages/email
git submodule add git://github.com/fuel/log.git fuel/packages/log
git submodule add git://github.com/fuel/docs.git docs

チェックアウト

cd lo.fuel.master.org

git submodule foreach 'git checkout 1.5/master'

設定ファイル(fuel/app/config/development/db.php)の編集

色々なフレームワーク同様にenvirment(環境設定)毎に設定ができます。デフォルトの環境設定はdevelopmentなのでfuel/app/config/development/db.phpでdbの設定を行います。
ちなみに環境変数を指定しているところはfuel/app/bootstrap.phpにあります。

Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);

fuel/app/config/development/db.php

fuel/app/config/development/db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */
return array(
	'default' => array(
		'type' => 'mysqli',
		'connection'  => array(
			'hostname' => 'hostname',
			'port' => '',
			'database' => 'database名',
			'username'   => 'ユーザー名',
			'password' => 'パスワード',
			'presistent' => false
		),
		'enable_cache' => false,
		'profiling' => true,
	),
);

ormの設定

ORMの設定を有効にします

fuel/app/config/config.php
<?php
.
.
.
	//ここの項目のコメントを外してください
	'always_load'  => array(
		'packages'  => array(
			'orm',
		),
.
.
.
//デフォルトのコメントが記載されていますが割愛します
	),

scaffold機能でCRUD環境を作る

scaffold概要(Ruby on Railの説明)から参照で

4.1 scaffold概要
Railsには、コードを自動生成するジェネレータが複数用意されています。ここでは、「scaffold」というジェネレータを紹介します。
scaffold(「足場」という意味)は、データベースのテーブルへの登録(CREATE)、参照(READ)、更新(UPDATE)、削除(DELETE)(英語の頭文字をとって、「CRUD」といいます)を行うWebアプリケーションのひな形となるソースコードを自動生成します。scaffoldを実行させれば、「足場」という名の通り、最低限のCRUDを行うWebアプリケーションを作成することができます。
実際の開発においては、使用する機会が少ないかと思いますが、ここではRailsの基本構造を知るために利用します。

公式でもrailの概念を借用しましたと書いてあります

cd lo.fuel.master.org
php oil g scaffold monkey name:string description:text
    Created model: APPPATH/classes/model/monkey.php
    Created migration: APPPATH/migrations/001_create_monkeys.php
    Created controller: APPPATH/classes/controller/monkeys.php
    Created view: APPPATH/views/monkeys/index.php
    Created view: APPPATH/views/monkeys/view.php
    Created view: APPPATH/views/monkeys/create.php
    Created view: APPPATH/views/monkeys/edit.php
    Created view: APPPATH/views/monkeys/_form.php

指定したmonkeyがcontrollerとmodel名でname:string description:textがテーブルmonkeysの内容を示しています

マイグレーション(migrate)の実行

マイグレーションとはDBの設定反映を行うためのコマンドです。
oilのscaffoldで作成したmodelの設定反映をDBにも行うためのものです。
APPPATH/migrations/003_create_monkeys.phpを見るとわかりやすいです。

fuel/app/migration/001_create_monkeys.php
<?php

namespace Fuel\Migrations;

class Create_monkeys
{
	public function up()
	{
		\DBUtil::create_table('monkeys', array(
			'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
			'name' => array('constraint' => 255, 'type' => 'varchar'),
			'description' => array('type' => 'text'),
			'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true),
			'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true),

		), array('id'));
	}

	public function down()
	{
		\DBUtil::drop_table('monkeys');
	}
}

最初にテーブルを作成したいのでup()を実行することになります。

cd lo.fuel.master.org
php oil refine migrate

http://localhost/monkeyにアクセスする

これでCRUD環境ができていますのでhttp://localhost/monkeyにアクセスしてください。

サンプル

fuelphp-sample