【发布时间】:2019-08-31 18:12:00
【问题描述】:
根据this 的博文,我在 Laravel 中成功实现了基于类的工厂。
最初我将我的ModelFactorys 放在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 命名空间中所做的那样。但是当我对此进行重构时,错误就开始了。
我需要做什么来解决这个问题?
【问题讨论】:
-
可能是我,但我不明白你遇到了什么错误。
-
"无法声明类 XXX,因为该名称已在使用中"
-
什么类:GroupFactory 类?
-
是的。现在在问题的顶部添加了确切的错误
-
调用它的第一个测试运行良好,然后在第二个测试中失败