Symfony的3.4.0找不到任何固定的服务,我使用的Symfony 3.4.0加载
,我尝试加载夹具:Symfony的3.4.0找不到任何固定的服务,我使用的Symfony 3.4.0加载
php bin/console doctrine:fixtures:load
错误而产生的数据时,有什么不对?
回答:
〜的/ dev/domain.lan/src目录/ ProductBundle/DataFixtures/ORM/ProductF ixture.php
<?php namespace ProductBundle\DataFixtures\ORM;
use Doctrine\Bundle\FixturesBundle\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use ProductBundle\Entity\Product;
class ProductFixture implements FixtureInterface
{
public function load(ObjectManager $manager)
{
// create 20 products! Bam!
for ($i = 0; $i < 20; $i++) {
$product = new Product();
$product->setName('Product name' . $i);
$manager->persist($product);
}
$manager->flush();
}
}
问题是解决了,有必要增加一个服务:(应用程序/配置/ services.yml)
services: # Product service
ProductBundle\:
resource: '../../src/ProductBundle/*'
exclude: '../../src/ProductBundle/{Entity,Repository,Tests}'
回答:
使用学说\捆绑\ FixturesBundle \夹具
类ProductFixture扩展夹具实现FixtureInterface
见文档:http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
回答:
我试图@亚历山大的解决方案,但对我来说这是行不通的。
我已经通过在services.yml
文件包中添加的标签服务类,Symfony doc解决同样的问题:
BlogBundle/Resources/config/services.yml
Services: ...
# Fixtures services
BlogBundle\DataFixtures\ORM\PostFixture:
tags: [doctrine.fixture.orm]
...
我BlogBundle/DataFixtures/ORM/PostFixture.php
类:
... use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
...
class PostFixture implements FixtureInterface
{
public function load(ObjectManager $manager)
{
...
}
}
来源灵感:Synfony doc -> Service container -> The autoconfigure Option
希望能对大家的替代解决方案
回答:
在4.0.1我要实现服务配置,显示的Symfony我DataFixtures文件夹:如果
在配置/services.yaml
services: ...
App\DataFixtures\:
resource: '../src/DataFixtures'
tags: [doctrine.fixture.orm]
我class IMPLEMENTS FixtureInterface并且没有这个配置,如果它是EXTENDS Fixture
回答:
该命令查找所有标记为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
}
}
第二个:您需要手动在
sevice.yml
配置标记doctrine.fixture.orm
到DataFixtures
。
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']
回答:
经过长期的研究,找到了解决办法。 这项工作有:
- 学说/教义,灯具束:^ 3.0,
- Symfony的^ 3.3
首先
- 定义你的灯具。
<?php namespace Where\MyFixtureBundle\FileFolder\IsLocated;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Nao\UserBundle\Entity\User;
class LoadData implements FixtureInterface
{
/**
* Load data fixtures with the passed EntityManager
*
* @param ObjectManager $manager
*/
public function load(ObjectManager $manager){
$object = new Entity();
$object->setFoo(bar)
...
$manager->persist($object);
$manager->flush();
}
}
接着,在bundle的service.yml文件或直接在 限定服务 “应用程序/配置/ service.yml”(未建议报告)
# Fixtures service your_service.name:
class: Full\Namespce\With\TheClassFixtureName
tags: [doctrine.fixture.orm] <-- important
不要忘了,只是要确定以下
composer du -o or composer dump-autoload -o
现在尝试执行你的命令加载数据的灯具。
回答:
可重复使用包的示例。
的src/Acme公司/包/ UserBundle/DataFixtures/ORM/DataFixtures.php
<?php namespace Acme\Bundle\UserBundle\DataFixtures\ORM;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
class DataFixtures extends Fixture
{
/**
* Load data fixtures with the passed EntityManager
*
* @param ObjectManager $manager
*/
public function load(ObjectManager $manager)
{
#your code
}
}
在app /配置/ services.yml
Acme\Bundle\UserBundle\DataFixtures\: resource: '../../src/Acme/Bundle/UserBundle/DataFixtures/'
添加您的灯具数据:
php bin/console doctrine:fixtures:load --append
以上是 Symfony的3.4.0找不到任何固定的服务,我使用的Symfony 3.4.0加载 的全部内容, 来源链接: utcz.com/qa/258974.html