QA@IT
«回答へ戻る

回答を投稿

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

>「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クラス使ってるけどちょっと振る舞い変えたいなとかそういう時にいいかもしれませんね。

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

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

>「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クラス使ってるけどちょっと振る舞い変えたいなとかそういう時にいいかもしれませんね。

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