从自定义包中加载灯具

时间:2019-12-03 23:37:33

标签: php symfony doctrine-orm symfony4

我正在为Symfony构建一个简单的软件包,我想知道我是否可以运行位于其中的夹具,因为它不在项目src根文件夹中。 这是我的项目结构:

Project
|
+--AdminBundle <- My custom bundle
|  +--Controller
|  +--DataFixtures
|  |  |
|  |  +--AdminFixtures.php <- The fixtures I want to run
|  | 
|  +--DependencyInjection
|  +--Entity
|  +--Resources
|
+--assets
+--bin
+--config
+--public
+--src
+--templates
+--vendor

这是AdminFixtures.php的代码


namespace ExampleVendor\AdminBundle\DataFixtures;

use App\AdminBundle\Entity\User;
use App\AdminBundle\Entity\Profile;
use Doctrine\Bundle\FixturesBundle\Fixture;

use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\ORMFixtureInterface;
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class AdminFixtures extends Fixture implements FixtureGroupInterface {
    private $passwordEncoder;


    public function __construct(UserPasswordEncoderInterface $passwordEncoder) {
        $this->passwordEncoder = $passwordEncoder;
    }

    public function load(ObjectManager $manager) {
        // Fixtures stuff
    }

    /**
     * This method must return an array of groups
     * on which the implementing class belongs to
     *
     * @return string[]
     */
    public static function getGroups(): array {
        return ['admin'];
    }
}

当我运行php bin/console doctrine:fixtures:load时 我收到一条错误消息:

  

[错误]找不到要加载的夹具服务。

我读到一些内容,每个实现FixtureGroupInterface的类都将自动注册为fixture,但是我认为这是行不通的,因为我在这里大声疾呼。

如何手动将其注册为灯具?如何使php bin/console doctrine:fixtures:load命令起作用?

1 个答案:

答案 0 :(得分:1)

我不太了解DoctrineFixtures捆绑包,因此最终可能会使用实现某个接口的每个 loaded 类,但我想只有在确保该类之外的类时才有可能src目录已加载,请查看您的 composer.json ,其中应包含以下内容:

................
    "autoload": {
        "psr-4": {
            "": "src/",
        }
    },

,然后考虑添加类似的内容: (假设您使用“ Admin \”作为AdminBundle中类的名称空间)

................
    "autoload": {
        "psr-4": {
            "": "src/",
            "Admin\\": "AdminBundle/",
        }
    },

此外,认识symfony的人最终会纠正我,但我不确定您是否应该再创建这样的捆绑包。 Admin是应用程序的一个模块,您将其放在src / Admin中,还是考虑在其他地方重用它,并将其作为适当的库放入您的供应商中?