「ヒューエルPHP」と読みます。
特徴
- オートローダーという仕組みで必要な機能のみを読み込むためメモリを節約し高速に動くアプリケーションを作れる。
- CakePHPに比べて機能がシンプルな分ルールに縛られずに開発ができる。
- 日本語で書かれている公式ドキュメントがある。
- PHP5.3以上がインストールされているサーバでのみ利用可能。
バージョン
2010年 | リリース | |
2011年 | 1.0.1 | |
2013年12月 | 1.7 |
oilコマンド
fuelphpの便利なコマンドラインツール。これ経由でfuelphpのプロジェクトを作成したりできます。(なお、oilを使わなくてもgithubからcloneしても始められます。)
ディレクトリ構成
public | ルートディレクトリになります。httpd.confのDocumentRootに指定します。 |
└index.php | 見に行くファイル |
app | |
└config | |
└config.php | 一番メインの設定ファイル。fuelphpのコア動作を設定できます。 |
└routes.php | ルーティングをカスタマイズしたい場合に使います。 |
└db.php | データベースの設定。接続先などの情報も記述します。 |
└classes | |
└controller | コントローラの記述場所 |
└presenter | Presenter(ViewModelみたいなもの)の処理を記述します。 |
└views | viewファイルの配置場所。配下にphpファイルを用意します。 |
コントローラー
FuelPHPはコントローラー名とメソッド名、引数によってURLパスが決まります。しっかり押さえておきましょう。
以下の場所に記述をしていきます。以下のように記述します。
1 2 3 |
app/classes/controller/welcome(コントロール名) class Controller_Welcome(コントローラー名) extends Controller |
メソッドの記述方法
1 2 3 4 |
public function action_hello($word,$word2){ echo $word; echo $word2; } |
action_の後に何かやりたいこと(index)を記述というfuelPHP特有の文法になります。
$word(パスパラメータ1)、$word2(パスパラメータ2)
URLで渡されるパスパラメータが入ります。
URL
以下のようにURLが決まります。
1 |
http://localhost/welcome(コントローラー名)/hello(メソッド名)/引数1/引数2 |
なお、メソッド名をaction_indexとした場合はindexという指定がなくても実行されます。
view
コントローラー側
URL「コントローラー名/viewtest」が呼ばれた際にviews/viewtest.phpというファイルを呼び出す設定になります。
1 2 3 4 |
public function action_viewtest(){ $word = "こんにちは"; return View::forge('viewtest',$word); } |
view側
HTMLを記述していきます。こんな感じでviewを用意します。
1 2 3 4 5 |
app/views/viewtest.php <html> <body><?php echo $word ?></body> </html> |
HTTPヘッダやステータスまで指定したい場合
Responseクラスを使います。Responseクラスを使わない場合は、bodyのみしか指定できませんが、使うことで「HTTPヘッダ」や「ステータス」などのHTTP通信全体の設定を柔軟に指定できます。
1 2 |
$view = View::forge("page/error") return Response::forge($view,500) |
用途
- ステータスコードの値を状況によって変えたい場合
- Cache-Controlの値を制御したい場合
set_headerメソッド
HTTPヘッダを定義したい場合に使うメソッドです。
遅延レンダリング
Viewオブジェクトが採用している仕組みです。forge実行時点ではまだテンプレートファイル自体は読み込まれていません。renderメソッドが呼ばれたタイミングで初めて読み込まれて内部に記述されている処理もそのタイミングで実行されます。
また、この仕組みを利用すればレンダリングの順番も制御したりできます。
基本的に「親view > 子view」の順に呼ばれることになるのですが子viewをrenderメソッドで先にレンダリングさせておけば「子view>親view」の順に呼ぶことも可能です。(なので、子から親に変数を渡したいなどといった用途がもし発生した場合はこれを使えば実装可能になる。)
リダイレクトしたい場合
Response::redirectメソッドを使います。これがコールされた場合はそのリクエストのプログラム処理はそこで終了します。また、ひとつ前のページに戻りたい場合はredirect_backメソッドを使用します。
viewを入れ子にする。
共通phpファイルなどを定義したいケースは多いと思います。
コントローラー側
1 2 3 4 5 6 7 8 9 |
public function action_viewtest(){ $view = View::forge('layout') $view->header = View::forge('header'); $view->footer = View::forge('footer'); $view->content = View::forge('content'); $view->set_global('aaa','渡したい値') // これを使うとheaderやfooterなどviewから再度呼び出しているviewにも値を渡せる。 return $view; } |
view側
layout.php
1 2 3 4 5 6 7 |
<html> <body> <?php echo $header; ?> <?php echo $content; ?> <?php echo $footer; ?> </body> </html> |
テンプレートエンジンにtwigを使う。
composer.json
1 2 3 |
"require": { "twig/twig": "1.*", } |
上記のように追加します。
fuel/app/config/config.php
- always_loadの記述のコメントアウトを解除します。
- packagesのコメントアウトを解除して、「'parser'」を追加します。
viewファイルの命名
viewファイルは拡張子がphpではなく以下のような命名に変更します。
1 |
fuel/app/views/content.twig |
controllerの中身
1 2 |
$data['name'] = '田中太郎'; return View::forge('content.twig',$data); |
viewの中身
1 |
<p>{{name}}</p> |
DB操作
事前に「config/development/db.php」にてデータベース接続情報を設定しておく必要があります。
登録
記述場所はとりあえずコントローラー直接でも構いません。
1 2 3 4 |
DB::insert('テーブル名')->set(array( 'name'=>'田中太郎', 'email'=>'tanaka@yahoo.co.jp' ))->execute(); |
取得
1 |
DB::select('*')->from('テーブル名')->execute(); |
フォーム
formからpostされてきたデータを取得するためのfuelPHPではAPIが用意されています。
テキストボックスの値の取得
1 |
Input::post('name'); |
バリデーション
例えば、名前に対して必須のルールを設定する場合は以下のように設定します。
1 2 3 4 5 6 7 8 9 10 11 |
$val = Validation::forge(); // バリデーションインスタンス生成 $val->add_field('name','名前','required'); // バリデーションルール適用 if($val->run()){ echo '通過'; exit; }else{ foreach($val->error() as $key => $ value) { echo $value->get_message(); } exit; } |
メール送信
FuelPHPでは「Email::forge();」という構文でインスタンスを使って、メールの送信処理を実装します。詳しい使い方は公式サイトで確認しましょう。
ユーザー認証
- usersテーブルを追加します。
- app/config/config.phpの中のpackagesにauthを追加します。
- Authクラスを使って処理を書いていきます。
セッション管理
Sessionクラスというクラスを使います。こんな感じでセッションに値を設定して取り出したりします。デフォルトはクッキーベースのセッションになります。(設定次第でファイルベース、DBベース、Redisベースなど選択も可能です。)
1 |
Session::set('key','値'); |
Presenter
MVCの派生であるMVP(Model-View-Presenter)のPresenterにあたる機能です。ViewModelといった方がわかりやすいかもしれません。FuelPHPでは1.7.2でViewModelクラスだったのが、Presenterという名称に変更になりました。controller/presenterの下にクラスは配置していきます。
用途
- ビューに関するロジックを抽象化してコントローラーから切り離すために使う。
- データの操作はしない。
- データベースの呼び出しを含める。
Controller
app/classes/controller/xxx.php
Presenter::forgeでPresenterを呼び出します。setで設定した値はPresenterでそのまま使うことができます。
1 2 3 4 5 6 7 |
class Controller_xxx extends Controller { public function action_xxx { return Response::forge( Presenter::forge('xxx')->set('bbb',$display_data) ) } } |
Presenter
app/classes/presenter/xxx.php
この$thisで設定したメンバー変数(aaa)はview側でそのまま使うことができます。
1 2 3 4 5 6 |
class Presenter_xxx extends Presenter { public function view() { $this => aaa = "テスト"; $this=> bbb = $this->display_data; } } |
Cache
Cache::set
キャッシュにデータを保存する場合のメソッド
Cache::get
キャッシュからデータを取得する場合のメソッド
1 2 3 4 5 6 |
try { // キャッシュからデータ取得 $content = Cache::get('test'); } catch (CachenotFoundException $e){ // キャッシュが見つからない場合 } |
エラーハンドリング
基本的にtry〜catchで例外処理できます。
UncaughtException
アプリケーションレベルでcatchされなかった例外を確実に処理できるExceptionで自動で組み込まれています。
HttpNotFoundException
fuelphp組み込みの404例外です。コントローラやアクションが見つからなかった場合は常にfuelphpがこの例外をスローします。スローした時にfuelphpは以下のような処理を実施します。
- config/routes.phpの_404設定がある場合はそのURLを処理する。
- なければ、エラー画面views/404.php(標準エラー画面)を処理する。
views/404.php
「fuel/core/views/404.php」に存在しデフォルトのレイアウトが用意されています。もしこれを上書きしたい場合は「fuel/app/views/404.php」に上書きしたいレイアウトを用意します。
Crudモデルを作成する
コマンド
1 |
php oil g model モデル名(postなど) カラム名1:型 カラム名2:型 |
以下のようなclassが生成されます。
1 2 3 4 |
class Model_Post extends ¥Model_Crud { protected static $_properties = array(カラム名1,カラム名2); protected static $_table_name = 'posts'; } |
作成、読み取り、更新、削除などの操作が行えます。
この記事へのコメントはありません。