ひ孫

犬のこととか書いていきたい

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を書き換えるのってあんまよくないらしいっすね。
まあ冷静に考えればそうですよねって感じですね。