コアクラスの拡張

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

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

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

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から拡張可能ですが、少し例外があります。

  • Fuel
  • Config
  • Config_Php
  • Config_File
  • Config_Interface
  • Finder
  • Arr
  • Input
  • Security
  • Event
  • Event_Instance
  • And any class you use in your main app/config/config.php

If you have activated the profiler in your configuration, you can not extend these classes from packages too:

  • Cookie
  • Session
  • Session_Cookie (or another session driver class, depending on your session configuration)
  • Session_Driver
  • Date
  • Profiler

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:

  • Fuel
  • Config
  • Package
  • Arr
  • Finder

Autoloader

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.