Symfony 3.4.0无法找到任何要加载的夹具服务

Ale*_*der 21 doctrine fixtures symfony symfony-3.4

我正在使用Symfony 3.4.0,我尝试使用以下命令加载灯具:

php bin/console doctrine:fixtures:load
Run Code Online (Sandbox Code Playgroud)

创建数据时出错,出了什么问题?

在此输入图像描述

GuR*_*uRu 36

此命令查找标记为的所有服务doctrine.fixture.orm.
有两种方法可以解决这个问题.

第一个:任何实现的类都ORMFixtureInterface将自动注册到此标记.

<?php

namespace AppBundle\DataFixtures\ORM;


use Doctrine\Bundle\FixturesBundle\ORMFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;

class LoadFixtures implements ORMFixtureInterface
{
    public function load(ObjectManager $manager)
    {
        #your code
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个:您需要手动标记doctrine.fixture.orm,以DataFixturessevice.yml配置.

services:
    ...

    # makes classes in src/AppBundle/DataFixtures available to be used as services
    # and have a tag that allows actions to type-hint services
    AppBundle\DataFixtures\:
        resource: '../../src/AppBundle/DataFixtures'
        tags: ['doctrine.fixture.orm']
Run Code Online (Sandbox Code Playgroud)


zat*_*ine 8

我试过@ Alexander的解决方案,但这对我不起作用.

我通过将标记服务添加到文件包上的Symfony doc来解决了同样的问题services.yml:

BlogBundle/Resources/config/services.yml

Services:
...
# Fixtures services
    BlogBundle\DataFixtures\ORM\PostFixture:
        tags: [doctrine.fixture.orm]
...
Run Code Online (Sandbox Code Playgroud)

我的BlogBundle/DataFixtures/ORM/PostFixture.php班级:

...
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
...

class PostFixture implements FixtureInterface
{
public function load(ObjectManager $manager)
    {
...
}
}
Run Code Online (Sandbox Code Playgroud)

Source Inspiration:Synfony doc - > Service container - > autoconfigure Option

希望它是一个替代解决方案


Ale*_*der 2

〜/dev/domain.lan/src/ProductBundle/DataFixtures/ORM/ProductF\xe2\x80\x8c\xe2\x80\x8bixture.php

\n\n
<?php\n\nnamespace ProductBundle\\DataFixtures\\ORM;\n\nuse Doctrine\\Bundle\\FixturesBundle\\FixtureInterface;\nuse Doctrine\\Common\\Persistence\\ObjectManager;\nuse ProductBundle\\Entity\\Product;\n\nclass ProductFixture implements FixtureInterface\n{\n\n    public function load(ObjectManager $manager)\n    {\n       // create 20 products! Bam!\n       for ($i = 0; $i < 20; $i++) {\n           $product = new Product();\n           $product->setName('Product name' . $i);\n           $manager->persist($product);\n       }\n\n       $manager->flush();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题解决了,需要添加一个服务:(app/config/services.yml)

\n\n
services:\n    # Product service\n    ProductBundle\\:\n        resource: '../../src/ProductBundle/*'\n        exclude: '../../src/ProductBundle/{Entity,Repository,Tests}'\n
Run Code Online (Sandbox Code Playgroud)\n