无法在Symfony 3.4

时间:2018-02-15 02:23:42

标签: php fixtures symfony-3.4

我正在使用DoctrineFixturesBundle。根据{{​​3}},任何扩展Fixture的类都将自动连接,以便控制台知道如何处理它。但是,尽管我的fixtures类扩展了Fixture(下面的代码),但我仍然收到以下错误:

  

无法找到要加载的任何灯具服务。

如果我尝试在services.yml文件中手动连接服务,请执行以下操作:

services:
    AppBundle\DataFixtures\:
        resource: '../../src/AppBundle/DataFixtures/'
        tags: ['doctrine.fixture.orm']

我反而得到:

  

在FileLoader.php第168行:

     

文件" ../../ src / AppBundle / DataFixtures"在/path/to/project/app/config/services.yml中不存在(在:/ path / to / project / app / config中)(从" / path /到/ project / app导入) /config/config.yml")。

     

在FileLocator.php第71行:

     

文件" ../../ src / AppBundle / DataFixtures"不存在(在:/ path / to / project / app / config中)。

我的数据夹具的路径是/path/to/project/src/DataFixtures。实际的类文件(AppFixtures.php)是:

namespace AppBundle\DataFixtures;

use AppBundle\Entity\Category;
use AppBundle\Entity\Product;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class AppFixtures extends Fixture
{
    public function load(ObjectManager $em)
    {
        $category = new Category();

        $category->setName("Test Category")
            ->setSlug()
            ->setDescription("This is only for test purposes");

        $fabricProduct = new Product();

        $fabricProduct->setName("Test OldProduct")
            ->setCanonicalPrice(2.45)
            ->setHasSale(false)
            ->setCategory($category)
            ->setSlug()
            ->setNumberInStock(45.25);

        $em->persist($category);
        $em->persist($fabricProduct);
        $em->flush();
    }
}

要抢先回答明显的问题,是的,捆绑包已正确注册。我的services.yml文件具有默认的自动装配功能:

services:
    # default configuration for services in *this* file
    _defaults:
        # automatically injects dependencies in your services
        autowire: true
        # automatically registers your services as commands, event subscribers, etc.
        autoconfigure: true
        # this means you cannot fetch services directly from the container via $container->get()
        # if you need to do this, you can override this setting on individual services
        public: false

关于我做错的任何想法?根据我发现的所有文件,这应该有效。

1 个答案:

答案 0 :(得分:0)

解决了它......通过Symfony中默认服务接线的工作方式,它希望所有内容都在src/AppBundle目录中。我的灯具位于那个灯具之外的目录中(显然,仍然在项目目录中)。将我的fixtures目录移动为src/AppBundle的孩子修复它。