【问题标题】:Laravel cannot declare class because the name is already in useLaravel 无法声明类,因为该名称已在使用中
【发布时间】: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 类?
  • 是的。现在在问题的顶部添加了确切的错误
  • 调用它的第一个测试运行良好,然后在第二个测试中失败

标签: php laravel class


【解决方案1】:

我认为该问题已不存在,但我正在为那些可能偶然发现此线程的人添加一个可能的解决方案。

composer.json 中使用psr-4 自动加载器并将工厂放在同一级别,而不是工厂的子目录中

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Classbased\\": "database/classbased/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ]
},

更新您的文件以反映正确的命名空间和目录结构。

<?php // database/classbased/GroupFactory.php
namespace Factories\ClassBased;

class GroupFactory {

旁注:我仍然不明白为什么在factories/ 中使用子目录对我不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 2020-06-21
    • 2021-06-13
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多