流行に乗り遅れないために!? 話題のFuelPHPをとりあえず触ってみたい人の為の超入門

FuelPHP ・・を今更ながら触ってみる。

少し前・・というか、CodeIgniterのライセンス変更の問題が出てきてからでしょうか。まー結構前からなんですが・・
FuelPHPというフレームワークが話題になっているようです!

ずっと気になってはいたのですが、忙しかったり、他に試してみたい事とかがあって手を出せていませんでした。。 最近少し暇が出来たので、そのFuelPHPってやつを ちょこっとだけ触ってみました!

せっかくなので、その時に得た知識を書き留めておきたいと思います! (ちなみに作業OSは、Macになります。)

そもそも、FuelPHPって何?

その前にFuelPHPって何ぞや?って人のために、少しだけ説明しておこうと思います!

・・っていっても、僕自身もそんなにしっかり勉強できているわけではないのでアレなんですが、要はPHP(バージョン5.3以上で動作する)フレームワークです。

(フレームワークとはその名の通り、開発を効率よく行うための”枠組み”を担うもので、要は雛形です。頻繁に使うような機能はフレームワークによりまとめて提供されます。)

また、FuelPHPはMVCモデルを採用しています。

MVCと聞けば理解できる人がほとんどかもしれませんが、念のため、MVCモデルについて触り程度に説明すると、、

MVCモデルの説明

まぁ、こんな感じですかねw

ここの 「Model(モデル),View(ビュー),Controller(コントローラ)」の頭文字をとってMVCモデルとなるわけです。
M・V・Cに処理を分けることで、仕様変更の際に互いに影響を受けにくい等のメリットがあります。

なんか雑な説明ですいませんw

ではでは!早速FuelPHPを触ってみましょー!

今回はFuelPHPドキュメントを参考にしました!
必要であれば、その都度ご参照いただければと思います!

FuelPHP ドキュメント

じゃー早速いってみよー!

とりあえず、プロジェクト作成!

1. まずは”Oil”のインストールから!

ひとまずコードジェネレーターである、”Oil”をインストールします。

ちなみにFuelPHPは手動でもインストールできるようですが、めんどくs
今回はお試しということで! ターミナルからクイックインストールで対応したいと思います!

手動でインストールされたい方は、下記のFuelPHPドキュメントをご参考いただければと思います。

インストール方法 – インストール – FuelPHP ドキュメント

それでは、Oilのインストール方法です!ターミナルから下記コマンドを実行します。

$ curl get.fuelphp.com/oil | sh

これで、Oilのインストールは完了!

2. プロジェクト作成!

次に、インストールしたいディレクトリにカレントディレクトリを移動させて、oil createコマンドを実行します!
インストールする場所は、ブラウザからアクセス可能な場所にしてくださいね。

$ cd '/path/to/www' #プロジェクトを作成したい場所に遷移
$ oil create 'プロジェクト名' #プロジェクト作成

ちなみに指定したプロジェクト名で、プロジェクトのディレクトリが作成され、その中に展開されるので、プロジェクト名は半角英数字にしたほうがいいと思います。

プロジェクトを作成すると、最低限必要なファイル群が自動的に生成されます。
M・V・Cにあたる、それぞれのディレクトリの関係は以下のとおりです。(説明に不要なディレクトリ・ファイルは割愛しています)

注意すべきところは、プロジェクトフォルダ/fuel/app/classes/view が、MVCで言うところの”View”では無い、というところぐらいでしょうか。 ここはFuelPHPの、”ViewModel”が格納される場所になります。(ViewModelについては、また機会があれば・・・マニュアルを参照ください。ごめんなさい。)

また、publicフォルダは公開フォルダで、coreフォルダはコアフォルダになります。coreフォルダはいわば本体が格納されているフォルダで、ここを弄ることはほぼ無いと考えてもらって良いと思います。(・・というか弄るべきではない。)

app・core等のフォルダは設定次第で移動させることが可能です・・が、今回はとりあえず動かしてみる!ってことが目的ですので、割愛させていただきます!

public/index.php内を修正することで移動可能だったはずですが、必要であれば、詳しくはFuelPHPドキュメントをご参照ください!

じゃあ、とりあえず表示してみよう!

ブラウザで早速アクセスしてみましょう!

http://localhost/インストールしたパス/public/ にアクセス!

FuelPHP トップ画像

かっけー!! まだ何もしてないのに、もう出来てる感ありますねw

どういう流れで表示されているのか?

まず、MVCモデルで最初に実行されるのは Controller(コントローラ)です。
コントローラにはデフォルトで welcome.php というファイルが作成されており、URLとの関係は以下の様な関係になっています。

ControllerとURLの関係

同じ色の所が、対応してる部分になります。クラス名のみ頭文字を大文字にする必要があります。
URLの規則としては、/public/(Controller_を除いた)クラス名/(action_を除いた)関数名 といった感じです。

また、今回アクセスした先は、この welcome/index が呼ばれるようになっているのですが、その秘密はルーティング機能にあります。

/fuel/app/config/routes.php がルーティングの設定ファイルです。

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

'_root_' => 'welcome/index' の設定がその部分です。
ルートの場合 welcome/index に遷移しろ!って言ってるんですね。解りやすいですね。

このように、アクセスされたURLを見て、遷移先を変更することが出来ます。
具体的な設定方法は、例のごとくマニュアルを・・・

テスト用のデータベース・テーブルを作成する!

今回は、mySQLを使いたいと思います。 (Oilからターミナルで作成する方法もありますが・・ひとまずはSQLを直接実行して作成することにします)

データベースを作成し、その中で以下のSQLを実行しました!(テストで出力してみるだけなんで、どんな構造でもいいです。。)

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` text NOT NULL,
  `col2` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (1, 'テスト1', 15);

データベースの設定をする!

プロジェクトフォルダ/fuel/app/config/db.php を修正します。

return array(
	'active' => 'testdb',
	/**
	 * Base config, just need to set the DSN, username and password in env. config.
	 */
	'default' => array(
		'type'        => 'pdo',
		'connection'  => array(
			'persistent' => false,
		),
		'identifier'   => '`',
		'table_prefix' => '',
		'charset'      => 'utf8',
		'enable_cache' => true,
		'profiling'    => false,
	),

	'redis' => array(
		'default' => array(
			'hostname'  => '127.0.0.1',
			'port'      => 6379,
		)
	),

	'testdb' => array(
		'type'   => 'mysqli',
		'connection' => array(
			'hostname'   => 'localhost',
			'database'   => 'データベース名',
			'username'   => 'ユーザ名',
			'password'   => 'パスワード',
			'persistent' => FALSE,
		),
		'table_prefix' => '',
		'charset'      => 'utf8',
		'caching'      => false,
		'profiling'    => true,
	),
);

'active' => 'default' の所を 'active' => 'testdb' とし、testdbの設定を追加します。

データベース名・ユーザ名・パスワードは、それぞれの環境に合わせて設定してくださいね!

データベースにアクセスするため、Modelを作成する!

SQLの実行方法には2種類の方法があるようです。

SQL クエリを書く

DB クラス を使ってネイティブな SQL クエリを次のように作成することが出来ます:

DB::query('SELECT * FROM users WHERE id = 5');

クエリビルダを使う

データをエスケープする、データを配列で使う、あるいは複数のデータベースエンジンを跨ぐことが出来るようなアプリケーションを作る、このような時、 ネイティブな SQL が重荷になることがあります。DB クラスのクエリビルダのメソッドを用いれば、ネイティブ SQL を抽象化して書くことが出来ます。

DB::select('title','content')->from('articles')->execute()->get('title');
モデル – 概要 – FuelPHP ドキュメント より

クエリビルダの方が、抽象化して書くことが可能ですが、あんまり複雑なSQLだと遅くなるようです。 興味のある方は、くどいようですがw 例のごとくドキュメントをご参照いただければと思います。

プロジェクトフォルダ/fuel/app/classes/model 以下に、test.php というファイルを作成し、以下の内容をコピペして保存してください。(ただSelectしてるだけですw)

<?php
namespace Model;

class Test extends \Model {
	public static function get_results()
	{
		$results = \DB::query('SELECT * FROM test')->execute();
		return $results->as_array();
	}
}

最初はexecute関数でSQLを実行した後、処理結果をそのまま返していたのですが、それだと駄目なようです。(ここでちょっとハマりました・・orz)
表示しようとすると、ビュー側でなんか変なエラーが出て表示できません!

「as_array」関数を利用して、リターンするようにしてください。

データベースの内容をController側で受け取り、View側で表示してみる!

/fuel/app/classes/controller/welcome.php 内を、以下のように編集します。

<?php
use \Model\Test;
/**
 * The Welcome Controller.
 *
 * A basic controller example.  Has examples of how to set the
 * response body and status.
 * 
 * @package  app
 * @extends  Controller
 */
class Controller_Welcome extends Controller
{

	/**
	 * The basic welcome message
	 * 
	 * @access  public
	 * @return  Response
	 */
	public function action_index()
	{
		$data['test'] = Test::get_results();
		return Response::forge(View::forge('welcome/index',$data));
	}

View::forge関数の第二引数に、View側で受け取るデータをセットしています。 連想配列の要素名が、そのままView側の変数となります。

そして、/fuel/app/views/welcome/index.php 内のbodyタグ内の適当な場所に、 <?php var_dump($test); ?> を追加します。

サイトにアクセスして、確認してみよー!

http://localhost/インストールしたパス/public/ にアクセス!

VAR_DUMPデータ

表示されていますね!

せっかくなので、FuelPHPならではの機能を使ってみる!

せっかくFuelPHPを使っているので、FuelPHPならではの機能を使ってみようと思います!

FuelPHPには、Restコントローラ というコントローラが存在します。 このコントローラはなんとリクエストするURLによって、吐き出す形式を変える事が出来ます!

例えば、URL末尾を.jsonでアクセスすれば、JSON形式のデータを取得でき、.xmlでアクセスすればXML形式でデータを 取得できます。

Controller_RestとURLの関係は、以下のとおりです。

Controller_RestとURLの関係

get(紫色の部分)で、GET、POST等、HTTP形式を指定でき、json(青色の部分)で、吐き出す形式を指定できます。(その他は普通のコントローラと同じ)

/fuel/app/classes/controller のディレクトリに test.php ファイルを作成し、下記のソースをコピペしてください。

<?php
class Controller_Test extends Controller_Rest
{
	public function get_list()
	{
		$this->response(array(
			'test' => array(
				1, 2, 3
			),
			'empty' => null
		));
	}
}

Controller内、$this->response関数にarray(配列)でデータを渡し、これがリクエスト時のデータとなります。

出力結果を確認してみよう!

http://localhost/インストールしたパス/public/test/list.json にアクセス!

http://localhost/インストールしたパス/public/test/list.xml にアクセス!

http://localhost/インストールしたパス/public/test/list.php にアクセス!

いろんな形式で出力できましたね!いやー簡単!
他にも吐き出せる形式があるみたいなので、興味のある方はドキュメントをご参照ください!

まだまだ、情報が少ない感もありますが・・

今回は、本当に基礎的な部分にしか触れていませんが、 軽く実装してみて、今後が楽しみなフレームワークの印象を受けました!(・・・ってまだ全然機能使えてませんがw)

普段、CakePHPを使用していますが、FuelPHPも並行で勉強していきたいですね。
Oilで色々と自動生成もできるようですし、これから少しづつ勉強していきたいと思いました!

また、まだまだ僕も勉強し始めたばかりなので、間違ってる所等あれば ご指摘いただければ幸いです!


最後に・・
FuelPHP の書籍を見つけたので貼っておきます!興味のある方はどうぞ!

この記事のトラックバック用URL

コメント