Symfony 3.4.0 N'a pas trouvé de services d'installation à charger
9 réponses
Cette commande recherche tous les services taggés avec doctrine.fixture.orm
.
Il y a deux façons de résoudre ce problème.
premier: toute classe qui implémente
ORMFixtureInterface
sera automatiquement enregistré avec cette balise.
<?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
}
}
Deuxième: vous devez marquer manuellement
doctrine.fixture.orm
DataFixtures
sevice.yml
configuration.
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']
j'ai essayé la solution de @Alexander mais ça ne marche pas pour moi.
j'avais résolu le même problème en ajoutant le service d'étiquette à la classe, Symfony doc sur le services.yml
le fichier bundle:
BlogBundle/Resources/config/services.yml
Services:
...
# Fixtures services
BlogBundle\DataFixtures\ORM\PostFixture:
tags: [doctrine.fixture.orm]
...
Mon BlogBundle/DataFixtures/ORM/PostFixture.php
catégorie :
...
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
...
class PostFixture implements FixtureInterface
{
public function load(ObjectManager $manager)
{
...
}
}
Source D'Inspiration:Synfony doc -> conteneur -> L'auto-configurer l'Option
Espère que ce sera une solution de rechange
exemple pour paquet réutilisable.
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
}
}
dans app/config / services.yml
Acme\Bundle\UserBundle\DataFixtures\:
resource: '../../src/Acme/Bundle/UserBundle/DataFixtures/'
ajouter les données de vos fixtures:
php bin/console doctrine:fixtures:load --append
~/dev/domaine.lan/src/ProductBundle/DataFixtures/ORM / ProductFixture.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();
}
}
le problème est résolu il était nécessaire d'ajouter un service: (app/config/services.yml)
services:
# Product service
ProductBundle\:
resource: '../../src/ProductBundle/*'
exclude: '../../src/ProductBundle/{Entity,Repository,Tests}'
Use Doctrine\Bundle\FixturesBundle\Fixture
classe de produit fixtfixture extends Fixture implements FixtureInterface
voir la documentation:http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
dans 4.0.1 je dois implémenter la configuration de service pour afficher Symfony mon dossier DataFixtures:
dans config / services.yaml
services:
...
App\DataFixtures\:
resource: '../src/DataFixtures'
tags: [doctrine.fixture.orm]
si ma classe implémente FixtureInterface et sans cette config si elle étend Fixture
après de longues recherches, j'ai trouvé une solution. Ce travail avec :
- doctrine / doctrine-fixtures-bundle: ^3.0,
- Symfony ^3.3
Premier
- Définissez votre appareil.
<?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();
}
}
ensuite, définissez un service dans le service de bundle.fichier yml ou directement dans "app/config/services.yml" (pas de recommandé)
# Fixtures service
your_service.name:
class: Full\Namespce\With\TheClassFixtureName
tags: [doctrine.fixture.orm] <-- important
N'oubliez pas, juste pour être sûr que le suivant
composer du -o or composer dump-autoload -o
essayez d'exécuter votre commande maintenant pour charger vos fixtures de données.
j'ai aussi dû mettre à jour l'app/Appel.php et ajouté le tableau suivant:
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle()
après avoir lu le commentaire ci-dessus, j'ai trouvé la solution à l'intérieur de la réponse de @GuRu :
"Deuxième: Vous devez manuellement la balise de la doctrine.luminaire.orm à DataFixtures à sevice.configuration yml".
puis implémente ORMFixtureInterface dans votre classe fixtures.
. en fait, nous devons ajouter une configuration supplémentaire à l'intérieur des services.yml pour le résoudre. Important à savoir, je remarque ce problème dans la version ~ 3.4 de symfony.
Best respect