コアクラスを置き換えずに拡張する
最も簡単で、あなたが生成した他のクラスと同様に動作します。 グローバル名前空間のコアクラスを単に拡張します。
class MyConfig extends Config {}
何をしているかを理解してください。同じ名前で拡張されたコアメソッドは、アプリケーションからと同様にコアから使用されます。 そのため予期しない振る舞いをすることがあります。
最も簡単で、あなたが生成した他のクラスと同様に動作します。 グローバル名前空間のコアクラスを単に拡張します。
class MyConfig extends Config {}
If you want your core extension to be used by the core as well as by your own application you need to extend it under the same name but take it from the "Fuel\Core" namespace. Below is an example for the Lang class which you create in "fuel/app/classes/lang.php":
class Lang extends Fuel\Core\Lang {}
しかし、コアクラスを同じ名前を持つクラスは、デフォルトでは無視されます。 オートローダに置き換えたクラスを認識させるには、アプリケーションブートストラップファイルで登録するする必要があります。次の行を探してください:
Autoloader::add_classes(array(
// ここにオーバーライドしたいクラスを追加します
// Example: 'View' => APPPATH.'classes/view.php',
));
下記のように、コメントで説明されている通りにLangクラスを追加します。
Autoloader::add_classes(array(
// ここにオーバーライドしたいクラスを追加します
// Example: 'View' => APPPATH.'classes/view.php',
'Lang' => APPPATH.'classes/lang.php',
));
この後、コアクラスはあなたが拡張したクラスに置き換わります。
頭にフルパスの名前空間をつけて使用した場合、これまで通りコアクラスを使用できます。 上記の拡張"Lang"では、"Fuel\Core\Lang"と呼ぶ事でオリジナルのものを使用できます。
コアの名前空間としてパッケージを追加することで、オートローダはコアからロードする前に あなたのパッケージからクラスをロードしようとします。 それらのクラスは検出されるようにオートローダでクラスを登録しなければなりません (ファイルシステムオートローダはグローバルへのエイリアスをサポートしません)。 以下は View クラスを拡張する例です。
Autoloader::add_core_namespace('Example');
Autoloader::add_classes(array(
'Example\\View' => __DIR__.'/classes/view.php',
));
すべてのクラスはappから拡張可能です。殆どのクラスはpackagesから拡張可能ですが、少し例外があります。
If you have activated the profiler in your configuration, you can not extend these classes from packages too:
You can work around some of these limitations by manually load your package in the app/bootstrap.php file, by adding Package::load('mypackagename'); just before the Fuel::init() call. If you do, your package can only not extend:
The Autoloader class is a special case, you can only extend it once as Autoloader
and
have it used. After extending it you have to require it manually in the app/bootstrap.php
file after the original Fuel\Core\Autoloader
, don't forget to remove the line that
aliases the core class to global.