在this博客文章之后,我在Laravel中成功实现了基于类的工厂。
最初,我将ModelFactory
放在app/some/folder
中。一切都很好。但是我想在database/factories/classbased
中使用它们,然后开始出现此错误;
PHP Fatal error: Cannot declare class Factories\ClassBased\GroupFactory, because the name is already in use in ..root/project/database/factories/classbased/GroupFactory.php on line 18
对于这个错误,我对SOF以及其他地方都有很好的了解,但是所有答案似乎都是出于不同的原因/我无法根据自己的情况调换答案。
我尝试将我的类重命名为完全唯一的名称(因为ModelFactory
已经是Laravel用于其标准工厂的命名格式),但是我仍然遇到相同的错误。我的自定义类似乎正在重新声明,我不知道为什么。
这是我自定义课程的内容:
<?php
// database/factories/classbased/GroupFactory.php
namespace Factories\ClassBased;
class GroupFactory
{
// stuff //
public function facilitatedBy(TeamMember $teamMember)
{
$this->facilitator = $teamMember;
return $this;
}
这就是我的测试内容:
<?php
namespace Tests\Feature;
use XYZ;
use Facades\Factories\ClassBased\GroupFactory;
class ClassBasedGroupFactoryTest extends TestCase
{
use RefreshDatabase, SetUpRolesAndPermissions, WithFaker;
public function setUp() : void
{
parent::setUp();
$this->setUpRolesAndPermissions();
}
/** @test */
public function it_can_set_the_facilitator()
{
$facilitator = $this->createTeamMemberWithRoleOf('facilitator');
$group = GroupFactory::facilitatedBy($facilitator)->create();
$this->assertEquals($facilitator->id, $group->facilitator->id);
}
/** @test */
public function another_test()
{
$x = 'y';
$group = GroupFactory::someThing($x)->create();
$this->assertEquals($x, $group->theThing);
}
我的composer.json
中有这个:
"autoload": {
"files": [
// files
],
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories",
"database/factories/classbased"
]
},
我希望能够无问题地使用该类,就像在App
命名空间中使用该类一样。但是当我将其重构时,错误就开始了。
该如何解决?