FuelPHP の概要

2011/11/22
PHPフレームワーク FuelPHP が話題になったのでインストールしてみた。 詳しい記事は、PHP フレームワークの「FuelPHP」がスゴすぎる を参照に。 - ORM、マイグレート対応しており、MongoDB、Redis も使えるとの事 - 基本的にスタティックにコーディングするので(インスタンスを経由ラッパーしていると思う)ので書くコードが少なそう - Unitテスト(PHPUnit、Jenkins)対応 - autoload 対応でライブラリ、ヘルパーの自動ロードができる - Scaffolding 対応(oilコマンド) - 多数のViewテンプレート対応 会社では独自フレームワークを使って、更にDBと連動してアプリ作成自動化を進めてますが、一人よがりなんですよね。 比較してみて良さげだったら切り替えようかと・・・ PHP フレームワークとして評価が高い「Codeigniter」の対抗として注目されているみたいです。

oil のインストール

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

public を Web ルートに

デフォルトだと、Webルートがプロジェクトディレクトリになってしまうので public を Webルートに設定する必要がある。 Appache の設定で、public をWebルートにするか、.htaccess で public/ へ rewirte 設定してやる。

Options -MultiViews

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule (.*) public/$1 [L]
</IfModule>

ファイル構成

.git .gitmodules README.md docs/ oil .gitignore CHANGELOG.md TESTING.md fuel/ public/

デフォルトだと、Git 管理される。 public/ fuel/ ディレクトリだけの構成 oil は拡張子こそないがPHPファイル(PHPコマンドで使うのかな?)

fuel/

app/ core/ packages/

RoR のような構成とはちょっと違うが、名前から大体想像がつくと思います。

fuel/app/

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レンダリングする前にパラメータを変えたりヘルパー的な事を記述するような気がする。

public/

.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()
	{
	}

}
- クラス名は、Controller_コントローラ名(最初は大文字) - デフォルトは Controller を継承 - ビューレンダリングは Response::forge() ,View::forge() を利用 - Fuel独自の関数 new static を実装しており、静的メソッドで書く事が可能 Response 、Viewで使える関数は、fuel/core/classes/response.php ,view.php を参照するとよいかと。 ちなみに Viewに関しては、forge(), render(), factory() といった数種類の方法がある。 ただアクション名とファイル名が一致したら、レンダリングの記述は省いて自動レンダリングしてくれる機能は欲しいところです

Codeigniter の対抗になるか?

Codeigniter vs FuelPHP でも比較検討の記事が掲載。 FuelPHP は機能は良いけど、新しい機能への弊害や利用者数の少なさが問題のようですね。
フォーム有効期限切れで Page Expired をリダイレクト
ログを日付でローテーションやクリアや削除
Homebrew で PHP8.0 から PHP7.4 にダウングレード
Big sur で zsh 移行と Homebrew アップグレード
Mac に minikube をインストール
途中から .gitignore に追加する
Larevel 6.x から Laravel 8.x にバージョンアップ
Composer で Allowed memory size (メモリ不足)エラー
Blade でカスタムクラスを利用する
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel7 リリース
v-html でHTML表示する
Laravel で Nuxt.js を使ってみる(Docker環境)
Laravel で Vue コンポーネントを使う
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす