aswww log

エンジニアの技術録。アプリとかウェブとか

Autoloader::add_classesに追記するとoilでエラーになる件

FuelPHPの話。simpleauthを拡張した直後にoil実行したらerrorになった。

~/modules/admin$ php oil g controller history index

Fatal error: Class 'Error' not found in /home/account/modules/admin/fuel/core/bootstrap.php on line 79
Fatal error: Class 'Config' not found in /home/account/modules/admin/fuel/core/bootstrap.php on line 47

'Error'が無いといわれたのでrequire_onceでFuel\Core\Errorを読み込んでみたり、core内を色々(一時的に)書きこんでみたけどわからん。
そして最終的に以下のsimpleauthを拡張したtipsterauthに関する記述が原因だと気づいた

Autoloader::add_classes(array(
      'Auth\\Auth_Login_Tipsterauth' => BASEPATH.'packages/auth/classes/auth/login/tipsterauth.php',
      'Auth\\Auth_Acl_Tipsteracl' => BASEPATH.'packages/auth/classes/auth/acl/tipsteracl.php',
      'Auth\\Auth_Group_Tipstergroup' => BASEPATH.'packages/auth/classes/auth/group/tipstergroup.php',
));

#ちなみに BASEPATH=~/modules/admin/fuel/base
#このBASEPATH配下に実在するモジュールをAutLoaderに書きこんでいた。

ここで、Autoloaderに書き込むのはAPPPATH.以下でないと読み込めないのかと考え、以下のとおり記述を修正し、モジュールも配置し直した。

'Auth\\Auth_Login_Tipsterauth' => APPPATH.'classes/base/packages/auth/classes/auth/login/tipsterauth.php',
'Auth\\Auth_Acl_Tipsteracl' => APPPATH.'classes/base/packages/auth/classes/auth/acl/tipsteracl.php',
'Auth\\Auth_Group_Tipstergroup' => APPPATH.'classes/base/packages/auth/classes/auth/group/tipstergroup.php',

結果、エラーは解消された。
このことから、やはりエラーの原因はAPPPATH配下に置かなかったことだと考えた。しかし、この話を知人のSEにしたらAPPPATH配下でなくてもいけるとのことらしい。もしかしらたこれは邪道な解決方法なのか?取り急ぎはエラーが出なくなったからいいけど、時間ある時に別のやり方を検証してみようかと思う。

参考:
Class not found fuelphp oil http://stackoverflow.com/questions/16865795/class-not-found-fuelphp-oil
[FuelPHP]独自オリジナル認証ドライバをsimpleauthを参考に実装する1 http://to-developer.com/blog/?p=155