コアクラスを置き換えずに拡張する
最も簡単で、あなたが生成した他のクラスと同様に動作します。 グローバル名前空間のコアクラスを単に拡張します。
class MyConfig extends Config {}
何をしているかを理解してください。同じ名前で拡張されたコアメソッドは、アプリケーションからと同様にコアから使用されます。 そのため予期しない振る舞いをすることがあります。
最も簡単で、あなたが生成した他のクラスと同様に動作します。 グローバル名前空間のコアクラスを単に拡張します。
class MyConfig extends Config {}
あなたのアプリケーションから使用される場合と同様に、拡張したコアクラスが他のコアクラスからも使用されるようにするには、 元のコアクラスと同じ名前でクラスを拡張する必要があります。ただし、"Fuel\Core" 名前空間から拡張するようにしてください。 "fuel/app/classes/lang.php" に Lang クラスを拡張した例を示します。
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 から拡張可能ですが、少し例外があります。
あなたが設定でプロファイラを有効にしている場合は、packages からこれらのクラスもまた拡張することはできません:
あなたは app/bootstrap.php ファイルの Fuel::init() の直前に Package::load('mypackagename'); を 追加することにより、あなたのパッケージを手動で読み込むことでこれらの制限の一部を回避することができます。 そうした場合も、あなたのパッケージでは拡張できません:
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.