Symfony Doctrine 找不到要加载的装置

2022-01-16 00:00:00 orm php symfony doctrine doctrine-orm

我从 Symfony (3.4) 开始,但负载夹具有问题.
当我执行 php bin/console dictionary:fixtures:load 然后我得到消息:

<上一页>在 LoadDataFixturesDoctrineCommand.php 第 95 行:找不到要加载的任何固定装置服务.

这是我的代码:

~/src/AppBundle/DataFixtures/ORM/LoadUserData.php

命名空间 AppBundleDataFixturesORM;使用 DoctrineCommonDataFixturesFixtureInterface;使用 DoctrineCommonPersistenceObjectManager;使用 SymfonyComponentDependencyInjectionContainerAwareInterface;使用 SymfonyComponentDependencyInjectionContainerInterface;类 LoadUserData 实现 FixtureInterface、ContainerAwareInterface {私人$容器;/*** 使用传递的 EntityManager 加载数据夹具** @param 对象管理器 $manager*/公共函数加载(ObjectManager $manager){$user = 新用户();$user->setLogin('admin');$user->setEmail('admin@admin.admin');$encoder = $this->container->get('security.password_encoder');$password = $encoder->encodePassword($user, '123qwe');$user->setPassword($password);$manager->persist();$manager->flush();}公共函数 setContainer(ContainerInterface $container = null){$this->container = $container;}}

~/app/config/services.yml

 参数:服务:_默认值:自动接线:真自动配置:真公开:假应用程序包:资源:'../../src/AppBundle/*'排除:'../../src/AppBundle/{Entity,Repository,Tests}'AppBundle控制器:资源:'../../src/AppBundle/Controller'公开:真实标签: ['controller.service_arguments']

谢谢.

解决方案

根据您使用的夹具版本,您应该扩展/实现不同的类.如果版本 >= 3.0 则

扩展 Fixture (使用 DoctrineBundleFixturesBundleFixture;)

如果

3.0

实现 FixtureInterface, ContainerAwareInterface

I starting with Symfony (3.4) and I have problem with load fixture.
When I execute php bin/console doctrine:fixtures:load then I get message:

In LoadDataFixturesDoctrineCommand.php line 95:
  Could not find any fixture services to load.

There is my code:

~/src/AppBundle/DataFixtures/ORM/LoadUserData.php

namespace AppBundleDataFixturesORM;

use DoctrineCommonDataFixturesFixtureInterface;
use DoctrineCommonPersistenceObjectManager;
use SymfonyComponentDependencyInjectionContainerAwareInterface;
use SymfonyComponentDependencyInjectionContainerInterface;

class LoadUserData implements FixtureInterface, ContainerAwareInterface {

    private $container;

    /**
     * Load data fixtures with the passed EntityManager
     *
     * @param ObjectManager $manager
     */
    public function load(ObjectManager $manager)
    {
        $user = new User();
        $user->setLogin('admin');
        $user->setEmail('admin@admin.admin');
        $encoder = $this->container->get('security.password_encoder');
        $password = $encoder->encodePassword($user, '123qwe');
        $user->setPassword($password);

        $manager->persist();
        $manager->flush();
    }

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }
}

~/app/config/services.yml

    parameters:

    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false

        AppBundle:
            resource: '../../src/AppBundle/*'
            exclude: '../../src/AppBundle/{Entity,Repository,Tests}'

        AppBundleController:
            resource: '../../src/AppBundle/Controller'
            public: true
            tags: ['controller.service_arguments']

Thanks.

解决方案

Depending on what version of fixtures you use you should extend/implement different classes. If the version is >= 3.0 then

extend Fixture (use DoctrineBundleFixturesBundleFixture;)

If < 3.0

implements FixtureInterface, ContainerAwareInterface

相关文章