PHPフレームワーク FuelPHP が話題になったのでインストールしてみた。
詳しい記事は、PHP フレームワークの「FuelPHP」がスゴすぎる を参照に。
会社では独自フレームワークを使って、更にDBと連動してアプリ作成自動化を進めてますが、一人よがりなんですよね。 比較してみて良さげだったら切り替えようかと・・・
PHP フレームワークとして評価が高い「Codeigniter」の対抗として注目されているみたいです。
RoR みたいにプロジェクトを作成するのに oil コマンドが必要なのでインストール
$ curl get.fuelphp.com/oil | sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 244 100 244 0 0 705 0 --:--:-- --:--:-- --:--:-- 1410 password:
パスワードを聞かれるのは、/usr/bin にコマンドをいれるかららしい。
$ cd Sites/ $ oil create blog Cloning into ./FuelTest... remote: Counting objects: 14115, done. remote: Compressing objects: 100% (4842/4842), done. remote: Total 14115 (delta 9635), reused 13321 (delta 9041) Receiving objects: 100% (14115/14115), 2.06 MiB | 666 KiB/s, done. Resolving deltas: 100% (9635/9635), done. Submodule 'docs' (git://github.com/fuel/docs.git) registered for path 'docs' ... Made writable: /Users/yoo/Sites/FuelTest/fuel/app/cache Made writable: /Users/yoo/Sites/FuelTest/fuel/app/logs Made writable: /Users/yoo/Sites/FuelTest/fuel/app/tmp Made writable: /Users/yoo/Sites/FuelTest/fuel/app/config
パーミッションを手動で変えたい場合は、
php oil refine install Made writable: /Users/yoo/Sites/FuelTest/fuel/app/cache Made writable: /Users/yoo/Sites/FuelTest/fuel/app/logs Made writable: /Users/yoo/Sites/FuelTest/fuel/app/tmp Made writable: /Users/yoo/Sites/FuelTest/fuel/app/config
デフォルトだと、Webルートがプロジェクトディレクトリになってしまうので public を Webルートに設定する必要がある。 Appache の設定で、public をWebルートにするか、.htaccess で public/ へ rewirte 設定してやる。
Options -MultiViews
RewriteEngine on
RewriteRule (.*) public/$1 [L]
.git .gitmodules README.md docs/ oil .gitignore CHANGELOG.md TESTING.md fuel/ public/
デフォルトだと、Git 管理される。 public/ fuel/ ディレクトリだけの構成 oil は拡張子こそないがPHPファイル(PHPコマンドで使うのかな?)
app/ core/ packages/
RoR のような構成とはちょっと違うが、名前から大体想像がつくと思います。
bootstrap.php classes/ config/ lang/ logs/ migrations/ modules/ tasks/ tmp/ views/
こう見ると、たくさんの機能がサポートされてる臭いがします。 config/ では、アプリの一般設定やDB設定ファイルがあり、開発/デプロイと分ける事が可能。 ローカライズ(デフォルト en)、XSS対応、cookie、モジュール管理、パスのルーティングなどなど多彩な設定が用意されています。
classes/ では
controller model view
といった、アプリ作成でお馴染みの顔ぶれが。 ただ、fuel/views というディレクトリもあるので使い分けは不明だが、テンプレート自体は app/views に HTML を記述するっぽい。 classes/view は、HTMLレンダリングする前にパラメータを変えたりヘルパー的な事を記述するような気がする。
.htaccess assets/ index.php
.htaccess でリライトして、index.php が最初に読み込まれます。
/**
* Set error reporting and display errors settings. You will want to change these when in production.
*/
error_reporting(-1);
ini_set('display_errors', 1);
/**
* Website document root
*/
define('DOCROOT', __DIR__.DIRECTORY_SEPARATOR);
/**
* Path to the application directory.
*/
define('APPPATH', realpath(__DIR__.'/../fuel/app/').DIRECTORY_SEPARATOR);
/**
* Path to the default packages directory.
*/
define('PKGPATH', realpath(__DIR__.'/../fuel/packages/').DIRECTORY_SEPARATOR);
/**
* The path to the framework core.
*/
define('COREPATH', realpath(__DIR__.'/../fuel/core/').DIRECTORY_SEPARATOR);
// Get the start time and memory for use later
defined('FUEL_START_TIME') or define('FUEL_START_TIME', microtime(true));
defined('FUEL_START_MEM') or define('FUEL_START_MEM', memory_get_usage());
// Boot the app
require APPPATH.'bootstrap.php';
// Generate the request, execute it and send the output.
try
{
$response = Request::forge()->execute()->response();
}
catch (HttpNotFoundException $e)
{
$route = array_key_exists('_404_', Router::$routes) ? Router::$routes['_404_']->translation : Config::get('routes._404_');
if ($route)
{
$response = Request::forge($route)->execute()->response();
}
else
{
throw $e;
}
}
// This will add the execution time and memory usage to the output.
// Comment this out if you don't use it.
$bm = Profiler::app_total();
$response->body(
str_replace(
array('{exec_time}', '{mem_usage}'),
array(round($bm[0], 4), round($bm[1] / pow(1024, 2), 3)),
$response->body()
)
);
$response->send(true);
// Fire off the shutdown event
Event::shutdown();
DOCROOT : doc パス登録 APPPATH : fuel/app パス登録 PKGPATH : fuel/package パス登録 COREPATH : fuel/core パス登録 FUEL_START_TIME : fuelphp 開始時間登録 FUEL_START_MEM : fuelphp メモリ容量登録
bootstrap.php で app のメインファイルを起動し、autoloader.php でオートロード(必ず読み込むファイル)等を管理しています。 CodeIgniter だと手動で書かなければいかない点が、FuelPHP では自動ロード可能って事ですね。
最後に、config.php を読み込んでいます。
■ビューファイル app/views/inquiry/index.php
普通にHTMLファイルを記述 レイアウトの分け方は現在不明
■コントローラーファイル app/inquiry.php
class Controller_Inquiry extends Controller
{
/**
* The basic welcome message
*
* @access public
* @return Response
*/
public function action_index()
{
return Response::forge(View::forge('inquiry/index'));
}
/**
* show how to use them.
*
* @access public
* @return Response
*/
public function action_send()
{
}
}
Response 、Viewで使える関数は、fuel/core/classes/response.php ,view.php を参照するとよいかと。 ちなみに Viewに関しては、forge(), render(), factory() といった数種類の方法がある。
ただアクション名とファイル名が一致したら、レンダリングの記述は省いて自動レンダリングしてくれる機能は欲しいところです
Codeigniter vs FuelPHP でも比較検討の記事が掲載。
FuelPHP は機能は良いけど、新しい機能への弊害や利用者数の少なさが問題のようですね。