現在、Phpspec を使用して Symfony2 プロジェクトに取り組んでおり、別の名前空間で記述されている Spec クラスを拡張する際に問題が発生しています。
たとえば、私のプロジェクトでは、 で説明されている次のクラスがありますspec/Acme/Model/Foo/FooSpec.php
。
namespace spec\Acme\Model\Foo;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
abstract class FooSpec extends ObjectBehavior{
//some code here
}
spec/Acme/Model/Bar/BarSpec.php
そして、私は拡張に別のクラスを持っていますFooSpec
:
namespace spec\Acme\Model\Bar;
use spec\Acme\Model\Foo\FooSpec;
class BarSpec extends FooSpec{
//some code here
}
phpspec を実行しようとすると、次のエラーが発生します。
PHP Fatal error: Class 'spec\Acme\Model\Foo\FooSpec' not found in /home/user/Projects/Acme/spec/Acme/Model/Bar/BarSpec.php on line 9
私が見つけた唯一の方法は、次の行を に追加することでしたspec/Acme/Model/Bar/BarSpec.php
。
include('./spec/Acme/Model/Foo/FooSpec.php');
PhpSpec\ObjectBehavior
特に他のクラス ( など) が正しく見つかった場合に、この特定のファイルを含めて実行する必要がある理由がわかりません。
なぜこれが起こっているのか分かりますか?
編集:
autoload
コメントで @Phil と @Sheikh Heera が示唆しているように、仕様の名前空間を登録するように設定しようとしましたが、どちらも機能していません。これが私がこれまでに試したことです:
require_once getcwd() . '/vendor/composer/ClassLoader.php';
$loader = new \Composer\Autoload\ClassLoader();
// register classes with namespaces
$loader->add('spec', getcwd().'/spec');
// activate the autoloader
$loader->register();
vendor/composer/autoload_namespaces.php
また、これを追加するためにファイルを変更しようとしました:
return array(
//some code here
'spec' => array(getcwd() . '/spec'),
//some more code
);
しかし、それでも同じエラーです。'spec' => array(getcwd())
また、何が起こるかを試してみまし$loader->add('spec', getcwd());
たが、今回はCannot redeclare class
別の仕様クラスを取得しました。
私のphpバージョンはPHP 5.4.9-4ubuntu2.4 (cli)
.
よろしくお願いいたします。