5980


現在以下の様なファイルを作成しています。

_[fuel/app/modules/hoge/classes/controller/hoge.php]_

[code]

    namespace Hoge
    {
    class Controller_Hoge extends \Controller
    {
      public function aaa(){}
    }
    
    class Hoge_Util
    {
      public static function bbb(){}
    }
    }
    
[/code]

こちらに対してテストを書こうと思い、以下の様なテストを作成しました。

_[fuel/app/modules/hoge/tests/testhogeutil.php]_

[code]

    class Test_Hoge_Util
    {
      public function test_bbb()
      {
        \Module::load('Hoge');
        $bbb = Hoge_Util::bbb();
        $this->assertEquals(1,$bbb);
      }
    }
    
[/code]

`php oil test` を実行したところ、以下のエラーが発生しました。

[code]

    Fatal Error - Class 'Hoge\Hoge_Util' not found
    
[/code]

おそらく `hoge.php` の `Hoge_Util` がロードできていないことが原因ではないかと思うのですが、  
FuelPHP では、このように一つのファイルに複数のクラスが存在する場合は、最初に書いてあるクラスしかロードされないのでしょうか？もしくは、
Controller ディレクトリにあるので、クラス名に `Controller` の文字列を入れないといけないのでしょうか？

ご存知のかたいらっしゃいましたら、教えていただけると助かります。


CC BY-SA 3.0
2015-02-05T06:28:38.893
5977
2015-02-05T08:40:59.700
2015-02-05T08:40:59.700
4978
5458
question
php テスト fuelphp
FuelPHP での、 Controller に定義したクラスの読み込み


FuelPHPに限りませんが、ほとんどのPHPでのオートローダはクラス名からファイルを探すので、  
Hoge\Hoge_Utilクラスがあれば、それに対応したファイル名のファイルを探し、そのファイル  
をロードします。しかし、このケースではそういうファイルは存在しないのでオートロードでき  
ません。

1ファイル1クラスにするのが通常です。

FuelPHPでのコントローラの名前空間の指定方法は、以下の公式ドキュメントの翻訳にあります。

<http://fuelphp.jp/docs/1.8/general/modules.html#/module_namespace>

デフォルト設定であれば、モジュール名の名前空間に `Controller_クラス名` という  
命名規則になりますので、現状でよいように思います。


CC BY-SA 3.0
2015-02-05T07:40:41.400
5980
2015-02-05T07:40:41.400
5489
5977
answer