FuelPHPのCoreを書き換えるようなパッケージの作り方
FuelPHPでどうも気になったLogクラス。
日別で分けてくれるけどログはだらだら1ファイルにまとめたい。
で、単純にcoreを上書きするのは面倒ではなくて
/fuel/app/classes/log.php
<?php class Log extends \Fuel\Core\Log{ public funtion customlog($msg){ echo $msg; } }
/fuel/app/bootstrap.php
<?php Autoloader::add_classes(array( 'Log' => APPPATH.'classes/log.php' //クラスを置き換える ));
ってな感じで2ファイルを変更するとめでたく\LogはFuel\Core\Logから上記のLogになる。
(参考:http://madroom-project.blogspot.jp/2011/12/fuelphpcore.html)
ただ、これパッケージ化して使いまわせるようにしたいとなったときになんかちょっと厄介だったのでメモ
とりあえずパッケージにクラスを作って
/fuel/packages/customlog/classes/log.php
<?php namespace 'Customlog'; class Log extends \Fuel\Core\Log{ public funtion customlog($msg){ echo $msg; } }
bootstrapの中でクラスを認識させて
/fuel/packages/customlog/bootstrap.php
<?php Autoloader::add_core_namespace('Customlog'); //これ重要 Autoloader::add_classes(array( 'Customlog\\Log' => __DIR__.DS.'classes'.DS.'log.php', //クラスを置き換える。appの時と違って名前空間付きで書く ));
app側に設定追加して
/fuel/app/config/config.php
<?php return array( : : : 'always_load' => array( : : : //188行目ぐらい 'packages' => array( //'orm', 'customlog' ), : :
って感じにしたら動いた。
最初はnamespaceなしでやってみてうまく入ったけど「果たしてこれでいいのか?」みたいな疑念が湧いていろいろ試した結果多分正しそうな感じに落ち着いた。
途中に書いたAutoloader::add_core_namespace('Customlog');
というのが\Fuel\Coreみたいにcoreクラスの名前空間として認識させるものっぽい。
よく考えたらほかのパッケージちゃんと見てれば問題ないよねって話だよね。
おしまい。
2012-07-08 追記
どうもCoreを書き換えるのってあんまよくないらしいっすね。
まあ冷静に考えればそうですよねって感じですね。