2017-12-03 2 views
5

Ich bin mit Symfony 3.4.0, ich versuche, Befestigungen zu laden mit:Symfony 3.4.0 konnten keine Befestigung Dienstleistungen finden laden

php bin/console doctrine:fixtures:load 

ist ein Fehler aufgetreten, während die Daten zu schaffen, was ist los?

enter image description here

+0

Wo sind Ihre Armaturen? Welches Verzeichnis? Könnte den Code –

+0

zeigen Ihre Armaturen sollten z.B. in 'src \ AppBundle \ DataFixtures \ ORM \ MyFixture.php' – baris1892

+0

Patch: ~/dev/domain.lan/src/ProduktBundle/DataFixtures/ORM/ProductFixture.php Website Root: ~/dev/domain.lan/ – Alexander

Antwort

1

~/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(); 
    } 
} 

Das Problem ist gelöst, es war notwendig, um einen Dienst hinzuzufügen: (app/config/services.yml)

services: 
    # Product service 
    ProductBundle\: 
     resource: '../../src/ProductBundle/*' 
     exclude: '../../src/ProductBundle/{Entity,Repository,Tests}' 
+0

Mein sein, Sie sollten es auf der 'services.yml' Bundle-Datei hinzufügen ex:' ~/dev/domain.lan/src/ProductBundle/Resouces/config/services.yml ' – zatamine

6

I @ Alexander-Lösung versucht, aber es ist nicht für mich funktioniert.

ich durch Hinzufügen des Tag-Dienst der Klasse das gleiche Problem gelöst hatte, Symfony doc auf dem services.yml Datei-Bundle:

BlogBundle/Resources/config/services.yml

Services: 
... 
# Fixtures services 
    BlogBundle\DataFixtures\ORM\PostFixture: 
     tags: [doctrine.fixture.orm] 
... 

Meine BlogBundle/DataFixtures/ORM/PostFixture.php Klasse:

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

class PostFixture implements FixtureInterface 
{ 
public function load(ObjectManager $manager) 
    { 
... 
} 
} 

Quelle Inspiration: Synfony doc -> Service container -> The autoconfigure Option

Hoffe es wird eine alternative Lösung

+1

Diese Lösung funktioniert einwandfrei. Ich fing an, diesen Fehler zu bekommen, als ich Doc-Fixtures von Version 2.4.1 auf 3.0.2 hochstufte. – Praveesh

1

In 4.0.1 Ich habe Service-Konfiguration implementieren Symfony Ordner mein DataFixtures zu zeigen:

in config/services.yaml

services: 

    ... 

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

wenn mein Klasse IMPLEMENTS FixtureInterface und ohne diese Konfiguration, wenn es sich um EXTENDS handelt Fixture

+0

Danke. Das hat für mich funktioniert. –

+2

@Dimitry, besser, diese Ressource zu verwenden: '% kernel.project_dir%/src/DataFixtures'' – Mick

9

Dieser Befehl sucht nach allen Diensten, die mit doctrine.fixture.orm getaggt sind.
Es gibt zwei Möglichkeiten, dieses Problem zu beheben.

erste: jede Klasse, die ORMFixtureInterface implementiert wird automatisch mit diesem Tag registriert werden.

<?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 
    } 
} 

Zweite ein: Sie müssen manuell doctrine.fixture.orm in sevice.yml Konfiguration DataFixtures markieren.

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'] 
+1

Zweite arbeitete für mich. – Sruj

+1

Zweites funktionierte nur. Vielen Dank –

0

Nach langer Forschung fand eine Lösung. Diese Arbeit mit:

  • Lehre/Lehre-Leuchten-Bundle:^3.0,
  • Symfony^3,3

Erste

  • Definieren Sie Ihre Fixture .
<?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(); 
    } 
} 

nächstes einen Dienst in der Datei service.yml oder direkt in "app/config/service.yml" (Allerdings gilt dies nicht)

des Bündel definieren,
# Fixtures service 
your_service.name: 
    class: Full\Namespce\With\TheClassFixtureName 
    tags: [doctrine.fixture.orm] <-- important 

Vergessen Sie nicht, nur sicher jetzt das folgende

composer du -o or composer dump-autoload -o 

Versuchen Sie, Ihren Befehl auszuführen, für Ihre Daten Fixtures zu laden.

1

Beispiel für wiederverwendbares Bündel.

src/Acme/Bundle/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 
    } 
} 

in app/config/services.yml

Acme\Bundle\UserBundle\DataFixtures\: 
    resource: '../../src/Acme/Bundle/UserBundle/DataFixtures/' 

Fixtures Daten anhängen:

php bin/console doctrine:fixtures:load --append 
Verwandte Themen