[FuelPHP]ネームスペースを上書きしてパッケージのクラスを書き換える
authパッケージのsimpleauth.phpをカスタマイズしたいけど、
既成のパッケージをいじるのは、気が引けるし、
そもそも、authパッケージは、gitのサブモジュールにしていて修正できない。
って言う時、名前空間が同じだと上書きされるという特徴を利用して、
自前のsimpleauth.phpと置き換えられないかやってみました。
まず、packagesディレクトリに、authパッケージと同じ構成で、
②myauthディレクトリを作り、authパッケージからコピーしたsimpleauth.phpを③のように配置します。
fuel └─packages ├─auth │ ├─classes │ │ ├─auth │ │ │ ├─acl │ │ │ ├─group │ │ │ └─login │ │ │ └─simpleauth.php--------------① │ │ └─model │ │ └─auth │ ├─config │ ├─lang │ │ └─en │ ├─migrations │ └─tasks └─myauth------------------------------------② ├─classes │ └─auth │ └─login │ └─simpleauth.php--------------③ └─bootstrap.php-------------------------④
つづいて、④のbootstrap.phpを作成します。
これは、公式のcoreを拡張する方法が、ヒントになりました。
パッケージ - 概要 - FuelPHP ドキュメント
以下は、bootstrap.phpの内容となりますが、Autoloaderに、Authつまりauthパッケージと同じ名前空間を指定して、でも、authじゃなくて、myauthの方のsimpleauth.phpを見るように指定してます。たぶん。
<?php Autoloader::add_core_namespace('Auth'); Autoloader::add_classes(array( 'Auth\\Auth_Login_Simpleauth' => __DIR__.'/classes/auth/login/simpleauth.php', ));
最後に、config.phpのalways_loadに、myauthを追加します。
'always_load' => array( 'packages' => array( 'auth', 'myauth', ), ),
これで、うまくいった。
あとは、もう、③simpleauth.phpを、お好きなようにカスタマイズすればいいと思う。