PHPの高速フレームワーク FuelPHP を試してみました。入門版サンプルと、MongoDBの設定方法まとめ


この記事の所要時間: 120

FuelPHP logo


FuelPHPは、2011年の7月にバーション1.0がリリースした
最新のPHPフレームワークです。

特徴は、MongoDBやMySQLなどをサポートしていて
RESTfulなコントローラーもすぐに作成できます。
また、軽量高速です。

FuelPHP公式サイト
http://fuelphp.com/

実際に、ちょこっとプログラムを書いて、使い方をまとめておきたいと思います。

インストールは、とっても簡単です。
下記のコマンドで、さくっとインストールされます。

# curl get.fuelphp.com/oil | sh



次に、動かしたいディレクトリに移動して、コマンドを入力すると
プロジェクトが作成出来ます。

# oil create 'プロジェクト名'



fuelってディレクトリが作りたければ

# oil create fuel


です。

Fuel directory

こんな感じにファイルが展開されます。

http://localhost/fuelPHP/public/

公開ポイントにアクセスすると、FuelPHPの画面がでます。

FuelPHP top

主要な設定ファイルは、3つあります。
fuel/app/config ディレクトリにあります。

config.php
メインの設定ファイル

db.php
データベース設定ファイル

routes.php
ルーティング設定ファイル

config.phpを下記のように書き換えます。

<?php
/**
 * Fuel is a fast, lightweight, community driven PHP5 framework.
 *
 * @package    Fuel
 * @version    1.0
 * @author     Fuel Development Team
 * @license    MIT License
 * @copyright  2010 - 2012 Fuel Development Team
 * @link       http://fuelphp.com
 */
 
/**
 * If you want to override the default configuration, add the keys you
 * want to change here, and assign new values to them.
 */
 
return array(
'index_file' => false,
'profiling' => false
);



http://example.jp/index.php/bbs/http://example.jp/bbs/
アクセス可能になります。

.htaccessで、mod_rewriteの設定がされています。

Hello Worldの表示


やっぱり、はじめのプログラムと言えば、Hello Worldの表示なので
サンプルを作ってみます。

まず、routes.phpのhelloの記述をコメントアウトします。

<?php
return array(
	'_root_'  => 'welcome/index',  // The default route
	'_404_'   => 'welcome/404',    // The main 404 route
 
//	'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);



fuel/app/classes/controller/hello.php ファイルを作成します。

<?php
 
class Controller_Hello extends Controller
{
	public function action_index()
	{
		return 'Hello World!!';
	}
}

http://localhost/fuelphp/public/hello/index

にアクセスすると、Hello World!!が表示されます。

実行結果


Helloworld

このサンプルは、Controllerだけで表示しているので
次は、Viewを使った表示にしてみます。

fuel/app/views/hello.php ファイルを作成します。
Viewだけ場所が違うので、始めは戸惑います^^

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Hello world</title>
</head>
<body>
	<p>Hello World!!</p>
</body>
</html>



fuel/app/classes/controller/hello.php 先ほどのコントローラーファイルを書き換えます。

<?php
class Controller_Hello extends Controller
{
	public function action_index()
	{
		return View::forge('hello');
	}
}

http://localhost/fuelphp/public/hello/index

に再度アクセスすると、Hello World!!が表示されます。

実行結果


Helloworld

結果は同じですが、Viewを使った表示になっています。

MVCモデル

コードをモデル (Model)、ビュー (View)、コントローラ (Controller) の 3つの役割に分割して作成します。

コントローラーは、アプリケーション全体の制御をします。
モデルは、データの管理をします。
ビューは、画面表示を行います。

それぞれ、MVCに分けてコーディングしていきます。

URLの構造


http://example.jp/コントローラ/メソッド [/パラメータ 1[/パラメータ 2[/...]]]



1番目の URI セグメントが、実行されるコントローラ名
2番目の URI セグメントが、実行されるコントローラのメソッド名
3番目以降の URI セグメントが、メソッドに渡される引数

fuel/app/classes/controller/blog.php ファイルを作成します。

<?php
class Controller_Blog extends Controller {
 
	public function action_category($cat = 'php',$page = '1')
	{
		return __FILE__ . '<br />' . $cat . '<br />' . $page;
	}
}

http://localhost/fuelphp/public/blog/category/php/1

実行結果

Php1

http://localhost/fuelphp/public/blog/category/perl/2

実行結果

Perl2

それぞれに、引数の内容が表示されています。

Restコントローラー


fuel/app/classes/controller/weather.php ファイルを作成します。

<?php
class Controller_Weather extends Controller_Rest
{
	public function get_today()
	{
		//クエリ文字列から地名を代入
		$location = Input::get('loc');
		$weather = 'fine';
 
		//レスポンスを返す
		$this->response(array(
			'location' => $location,
			'weather' => $weather,
		));
	}
}



パラメータを付けてアクセスします。

http://localhost/fuelphp/public/weather/today.json?loc=tokyo



実行結果


Rest

Restコントローラーを使うと
簡単に、jsonxmlCSVで出力することが出来ます。
とっても便利です!

拡張子を指定すると、自動で指定したフォーマットで出力されます。
xml    XML
json   JSON
jsonp  JSONP
csv   CSVファイル


MongoDB


app/config/db.php の設定をします。

<?php
/**
 * Use this file to override global defaults.
 *
 * See the individual environment DB configs for specific config information.
 */
 
 
return array(
	'active' => 'mongo',
	'mongo' => array(
		'default' => array(
			'hostname'   => 'localhost',
			'database'   => 'blog',
			'username'   => 'user',
			'password'   => 'pass',
		),
	),
);



fuel/app/classes/controller/blog.php ファイルを変更します。

<?php
class Controller_Blog extends Controller {
 
	public function action_index()
	{
 
		$mongodb = \Mongo_Db::instance();
		// 挿入
		$results = $mongodb->insert('posts', array('name' => '名前', 'contents' => 'コンテンツ'));
		// データ取得
		$results = $mongodb->get('posts');
		var_dump($results);
 
		return $results;
 
	}
}

http://localhost/fuelphp/public/blog/

実行結果


Mongo

簡単に、MongoDBにも接続できます。

まとめ


FuelPHPなどのフレームワークを使うと
保守性も上がるし、モジュールの流用なども簡単にできるようになります。

また、jsonなどのRestコントローラーは、簡単に作成出来るので
わざわざコーディングしなくても良くなります。

脆弱性の対応なども、フレームワーク側で吸収できます。
DBの接続なども簡単なので、FuelPHPを使っていきたいと思います♪

参考図書


Cover s

はじめてのフレームワークとしてのFuelPHP
http://tatsu-zine.com/books/fuelphp1st

関連記事: