J'utilise Symfony 3.4.0, j'essaie de charger des appareils avec:
php bin/console doctrine:fixtures:load
Une erreur est survenue lors de la création des données, qu'est-ce qui ne va pas?
Cette commande recherche tous les services marqués avec doctrine.fixture.orm
.
Il existe deux façons de résoudre ce problème.
La première: toute classe implémentant
ORMFixtureInterface
sera automatiquement enregistrée 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 manuellement tagger
doctrine.fixture.orm
àDataFixtures
dans la configurationsevice.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']
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 de balises à la classe, doc Symfony sur le groupe de fichiers services.yml
:
BlogBundle/Resources/config/services.yml
Services:
...
# Fixtures services
BlogBundle\DataFixtures\ORM\PostFixture:
tags: [doctrine.fixture.orm]
...
Ma classe BlogBundle/DataFixtures/ORM/PostFixture.php
:
...
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
...
class PostFixture implements FixtureInterface
{
public function load(ObjectManager $manager)
{
...
}
}
Source Inspiration: Documentation Synfony -> Conteneur de services -> Option de configuration automatique
J'espère que ça va être une solution alternative
Exemple pour un 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/'
ajoutez vos données de fixtures:
php bin/console doctrine:fixtures:load --append
~/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();
}
}
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}'
utilisez Doctrine\Bundle\FixturesBundle\Fixture
classe ProductFixture étend Fixture implémente FixtureInterface
voir documentation: http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
Dans 4.0.1, je dois implémenter la configuration du service pour afficher mon dossier DataFixtures dans Symfony
dans config/services.yaml
services:
...
App\DataFixtures\:
resource: '../src/DataFixtures'
tags: [doctrine.fixture.orm]
si ma classe IMPLEMENTS FixtureInterface et sans cette configuration si elle est EXTENDS Fixture
Après avoir lu le commentaire ci-dessus, j'ai trouvé une solution dans la réponse de @GuRu:
" Deuxième question: vous devez associer manuellement doctrine.fixture.orm à DataFixtures dans la configuration sevice.yml ".
Puis implémente ORMFixtureInterface dans votre classe de fixtures.
. en fait, nous devons ajouter une configuration supplémentaire à l'intérieur de services.yml pour le résoudre .. Il est important de savoir que je remarque ce problème dans la version ~ 3.4 de symfony.
Sincères salutations
Après de longues recherches, trouvé une solution. Ce travail avec:
- doctrine/doctrine-fixtures-bundle: ^ 3.0,
- Symfony ^ 3.3
Premier
- Définissez votre luminaire.
<?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 fichier service.yml du bundle ou directement dans "app/config/service.yml" (non recommandé)
# Fixtures service
your_service.name:
class: Full\Namespce\With\TheClassFixtureName
tags: [doctrine.fixture.orm] <-- important
N'oubliez pas, juste pour être sûr de ce qui suit
composer du -o or composer dump-autoload -o
Essayez d'exécuter votre commande maintenant pour charger vos données.
Je devais également mettre à jour le fichier app/AppKernel.php et ajouter le tableau suivant:
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle()