コアクラスの拡張

何をしているかを理解してください。同じ名前で拡張されたコアメソッドは、アプリケーションからと同様にコアから使用されます。 そのため予期しない振る舞いをすることがあります。

コアクラスを置き換えずに拡張する

最も簡単で、あなたが生成した他のクラスと同様に動作します。 グローバル名前空間のコアクラスを単に拡張します。

class MyConfig extends Config {}

コアクラスを拡張し、置き換える

あなたのアプリケーションから使用される場合と同様に、拡張したコアクラスが他のコアクラスからも使用されるようにするには、 元のコアクラスと同じ名前でクラスを拡張する必要があります。ただし、"Fuel\Core" 名前空間から拡張するようにしてください。 "fuel/app/classes/lang.php" に Lang クラスを拡張した例を示します。

class Lang extends Fuel\Core\Lang {}

しかし、コアクラスを同じ名前を持つクラスは、デフォルトでは無視されます。 オートローダに置き換えたクラスを認識させるには、アプリケーションブートストラップファイルで登録するする必要があります。次の行を探してください:

Autoloader::add_classes(array(
	// ここにオーバーライドしたいクラスを追加します
	// 例: 'View' => APPPATH.'classes/view.php',
));

下記のように、コメントで説明されている通りにLangクラスを追加します。

Autoloader::add_classes(array(
	// ここにオーバーライドしたいクラスを追加します
	// 例: '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 から拡張可能ですが、少し例外があります。

  • Fuel
  • Config
  • Config_Php
  • Config_File
  • Config_Interface
  • Finder
  • Arr
  • Input
  • Security
  • Event
  • Event_Instance
  • そして、あなたが app/config/config.php で使用している任意のクラス

あなたが設定でプロファイラを有効にしている場合は、packages からこれらのクラスもまた拡張することはできません:

  • Cookie
  • Session
  • Session_Cookie (または別のセッションドライバクラス、あなたのセッション設定に依存)
  • Session_Driver
  • Date
  • Profiler

あなたは app/bootstrap.php ファイルの Fuel::init() の直前に Package::load('mypackagename'); を 追加することにより、あなたのパッケージを手動で読み込むことでこれらの制限の一部を回避することができます。 そうした場合も、あなたのパッケージでは拡張できません:

  • Fuel
  • Config
  • Package
  • Arr
  • Finder

Autoloader

Autoloader クラスは特別なケースで、Autoloader として一度だけ拡張でき、使用できます。 拡張した後は、手動で app/bootstrap.php ファイルの中で、オリジナルの Fuel\Core\Autoloader の後に require しなければいけません。 コアクラスをグローバルにエイリアスする行を忘れずに削除してください。