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
,以DataFixtures
在sevice.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)
我试过@ 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
希望它是一个替代解决方案
〜/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\nservices:\n # Product service\n ProductBundle\\:\n resource: '../../src/ProductBundle/*'\n exclude: '../../src/ProductBundle/{Entity,Repository,Tests}'\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
13673 次 |
最近记录: |