@madmamor です。
先日の15日目は @eifuku さんの
cent osでのphp5.3環境のセットアップ with "yum" でした。
FuelPHPのcoreクラスを拡張したくなるケースは、色々と出てくると思います。
以前、Logクラスを拡張したので、そのまとめ的な内容です。
先に、ドキュメントは以下になります。
公式:
http://docs.fuelphp.com/general/extending_core.html
日本語:
http://press.nekoget.com/fuelphp_doc/general/extending_core.html
私がLogクラスを拡張した理由は2つ有ります。
(1) メソッド名の簡略化
Log::info は Log::i で呼び出したい。
Log::debug は Log::d で呼び出したい。
Log::warning は Log::w で呼び出したい。
Log::error は Log::e で呼び出したい。
(2) 非スカラー型(配列等)の変数も直接渡してログ出力したい。
となります。
早速、拡張したソースを掲載しても良いのですが、その前に。
そもそも、coreクラスがどこに有るのか。知っておいた方が良いはずです。
coreクラスはその名の通り、core/classesの中に有ります。
直下にはディレクトリとphpファイルがずらっと並んでいます。
14日目の @kenji_s さんの記事( FuelPHP の URL とコントローラの関係 )にある通り、
"クラス名の中の「_」はフォルダ区切りを意味する"
という決まり事があります。
ですので、ControllerクラスとController_Templateクラスはそれぞれ、以下のような配置になっています。
core/classes/controller.php
core/classes/controller/template.php
これを知っているだけでも、coreのソースを追いやすくなると思います。
では、Logクラス(core/classes/log.php)の拡張例を紹介してみます。
【例1】
クラス名をそのままにする場合。("コアクラスを拡張し、置き換える"場合。)
app/classes/log.phpを作成。
<?php class Log extends Fuel\Core\Log { public static function i($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::info($msg, $method); } public static function d($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::debug($msg, $method); } public static function w($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::warning($msg, $method); } public static function e($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::error($msg, $method); } }
次に、app/bootstrap.phpを編集します。
以下のような箇所が有るはずなので
Autoloader::add_classes(array( // Add classes you want to override here // Example: 'View' => APPPATH.'classes/view.php', ));
ここに、今回作成したLogクラスを追加します。
Autoloader::add_classes(array( // Add classes you want to override here // Example: 'View' => APPPATH.'classes/view.php', 'Log' => APPPATH.'classes/log.php', ));これをしないと、先に作成したapp/classes/log.phpのLogクラスは無視されます。
使い方は、debugの場合
Log::d($msg);となります。
Log::dの中で
if(!is_scalar($msg)) $msg = print_r($msg,true);しているので、$msgは配列でも構いません。
【例2】
クラス名をMylog等としたい場合。("コアクラスを置き換えずに拡張する"場合。)その他は例1と同様。
app/classes/mylog.phpを作成。
<?php class Mylog extends Fuel\Core\Log { public static function i($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::info($msg, $method); } public static function d($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::debug($msg, $method); } public static function w($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::warning($msg, $method); } public static function e($msg, $method = null) { if(!is_scalar($msg)) $msg = print_r($msg,true); return parent::error($msg, $method); } }
使い方は、debugの場合
Mylog::d($msg);となります。
尚、この場合、app/bootstrap.phpの編集は不要です。
以上、coreクラスの拡張方法でした。
17日目は @mataga さんの
FuelPHP動作実験 - oil console & PHP Interactive改を使って マニュアルの例文コピペでいろんなメソッドを試してみよう☆彡
です。
No comments:
Post a Comment