QA@IT

FuelPHPで最初に実行して欲しいコードを書く場所を教えてください

4914 PV

FuelPHP 1.6を使っています。
最初に実行して欲しいコードを書く場所は、index.phprequire APPPATH.'bootstrap.php';tryの間ですかね?

// Boot the app
require APPPATH.'bootstrap.php';

// ここですかね?

// Generate the request, execute it and send the output.
try

ここだったらFuelPHPのもろもろの設定も終わってますよね。

追記1

この質問、最初というのが漠然としててよくわからないですね > FuelPHPで最初に実行して欲しいコードを書く場所を教えてください - QA@IT
https://twitter.com/kenji_s/status/352983170305638400

仰る通りですね。
例えば、オブジェクト定数ではないただの定数を定義したい時です。

追記2

@honda0510 app/bootstrap.phpでしょうね
https://twitter.com/kenji_s/status/353012860600848384

言われてみると「そんな気がする」ということで納得してしまいました。

回答

最初に実行して欲しい処理はコントローラのbeforeをオーバライドします(HTTP前提ですよね?)。
コントローラの種類は全部で4種類あり、継承関係は以下のとおりです。
・Controller
・Controller_Template( extends Controller)
・Controller_Rest( extends Controller)
・Controller_Hybrid( extends Controller_Rest)

全てのリクエストに対してbeforeを通過させたいなら、CoreのControllerを拡張し、fuel/app/bootstrap.phpのAutoloader::add_classesにてCoreクラスのControllerを置き換えてしまえばいいです。

編集 履歴 (0)
  • ありがとうございます。確認の時間が取れないでいます。すみません。確認でき次第またコメントします。 -
  • いえいえ、特にコメントは求めていませんので、よくわからない、上手くできない等ありましたらコメントください。 -
  • 確認しました。遅くなってすみませんでした。質問に追記しましたように、app/bootstrap.php で納得してしまいました。 -
  • ただ、教えていただいたことにも興味がありますので、よろしければ「CoreのControllerを拡張」と「CoreクラスのControllerを置き換えてしまえばいい」についてもう少し詳しく教えてください。 -

文章がコメントに収まらないのでこちらに投稿します。

>「CoreのControllerを拡張」と「CoreクラスのControllerを置き換えてしまえばいい」についてもう少し詳しく教えてください。

FuelPHPのコントローラは原則としてControllerやController_Templateを継承して作ります。
よくある例として、ユーザがログインしているかどうかを判定する認証フィルタはコントローラの処理がコールされるまえに実行されて欲しいので、実装するコントローラのbeforeに処理を定義しても良いのですが、全てのコントローラに認証処理を実装するのは非効率なのでbeforeで認証処理を行うコントローラを別途作ります(Coreの拡張)。
継承関係は以下のようになります。
Controller_XXX > Controller_Base > Controller_Template
(認証フィルタはController_Baseのbeforeへ実装)

ところがこれを素直に実装すると
"class Controller_XXX extends Controller_Base"となり、$ oil g controllerで自動生成されたコントローラはリファクタリングしないと使用できません。
そこでCoreの置換を行います。
簡単に説明するとController_Templateを継承したController_Template(自作クラス)をapp/bootstrap.phpで置き換えてしまいます。

app/bootstrap.php
Autoloader::add_classes(array(
'Controller_Template' => DIR.'/classes/core/template.php',
'Date' => DIR.'/classes/core/date.php',
'Log' => DIR.'/classes/core/log.php',
));

こうするとCoreクラスを呼んでいるようで実は自作クラスを呼ぶことができるようになります。Coreクラス使ってるけどちょっと振る舞い変えたいなとかそういう時にいいかもしれませんね。

説明が粗雑で申し訳ないですが、宜しくお願い致します。

編集 履歴 (0)
  • イメージは掴めました。あとは動作確認しながら理解していきたいと思います。ご丁寧にありがとうございました。 -

ざっとFuelPHPの内容をさらってみた程度の知識ですが、
どういう用途に使いたいかにもよるとは思いますがそこには書かないんじゃないかなと思います。

オートローダーの読み込みタイミングを私はよくわかってませんがforgeかexecuteのタイミングで読み込まれるような気がしますので、指定してくれた場所では設定が読み込まれた程度ではないかと思います。

独自クラスをロードしてほしいならオートローダーに追加する(Autoloader::add_classes?)、または自動で読み込まれるようにする(configのalways_load.xxxx )。
http://fuelphp.jp/docs/1.5/general/configuration.html

またはコアクラスを拡張したいのであれば以下のドキュメントに従うことになるんじゃないかと思います。
http://fuelphp.jp/docs/1.5/general/extending_core.html

全体的な設定値を定義したい場合もbootstrapや独自クラスで持った方が良いように思います。

編集 履歴 (0)
  • ありがとうございます。確認してまたコメントします。 -
  • 確認しました。遅くなってすみませんでした。Twitterでもbootstrapという回答をいただき、納得しました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。