run - Symfony 3.4.0 no pudo encontrar ningún servicio de dispositivo para cargar
Después de leer el comentario anterior, encontré una solución dentro de las respuestas de @GuRu:
" Segundo: necesita etiquetar manualmente doctrine.fixture.orm a DataFixtures en la configuración de sevice.yml ".
Luego implementa ORMFixtureInterface en tu clase de aparatos.
. de hecho, tenemos que agregar una configuración adicional dentro de services.yml para resolverlo. Es importante saber que noté este problema en la versión ~ 3.4 de Symfony.
Cordial saludo
Después de una larga investigación, encontró una solución. Este trabajo con:
- doctrine / doctrine-fixtures-bundle: ^ 3.0,
- Symfony ^ 3.3
primero
- Define tu Accesorio.
<?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();
}
}
A continuación, defina un servicio en el archivo service.yml del paquete o directamente en "app / config / service.yml" (no recomendado)
# Fixtures service
your_service.name:
class: Full/Namespce/With/TheClassFixtureName
tags: [doctrine.fixture.orm] <-- important
No lo olvides, solo para asegurarte de lo siguiente.
composer du -o or composer dump-autoload -o
Intenta ejecutar tu comando ahora para cargar tus datos.
Ejemplo para paquete reutilizable.
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
}
}
en app / config / services.yml
Acme/Bundle/UserBundle/DataFixtures/:
resource: ''../../src/Acme/Bundle/UserBundle/DataFixtures/''
agregue los datos de sus accesorios:
php bin/console doctrine:fixtures:load --append
En 4.0.1 tengo que implementar la configuración del servicio para mostrar Symfony mi carpeta de DataFixtures:
en config / services.yaml
services:
...
App/DataFixtures/:
resource: ''../src/DataFixtures''
tags: [doctrine.fixture.orm]
si mi clase IMPLEMENTA FixtureInterface y sin esta configuración si es EXTENDS Fixture
Este comando busca todos los servicios etiquetados con doctrine.fixture.orm
.
Hay dos formas de solucionar este problema.
Primero: cualquier clase que implemente
ORMFixtureInterface
se registrará automáticamente con esta etiqueta.
<?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
}
}
Segundo: necesita etiquetar manualmente
doctrine.fixture.orm
aDataFixtures
en la configuración desevice.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'']
Intenté la solución de @landler, pero no me funciona.
Resolví el mismo problema al agregar el servicio de etiquetas a la clase, el documento de Symfony en el paquete de archivos services.yml
:
BlogBundle/Resources/config/services.yml
Services:
...
# Fixtures services
BlogBundle/DataFixtures/ORM/PostFixture:
tags: [doctrine.fixture.orm]
...
Mi 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: Synfony doc -> Service container -> La opción autoconfigure
Espero que sea una solución alternativa.
También tuve que actualizar la aplicación / AppKernel.php y agregué la siguiente matriz de paquetes:
new Doctrine/Bundle/FixturesBundle/DoctrineFixturesBundle()
usar Doctrine / Bundle / FixturesBundle / Fixture
La clase ProductFixture amplía los implementos de FixtureInterface
consulte la documentación: http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
~ / 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();
}
}
El problema está resuelto, era necesario agregar un servicio: (app / config / services.yml)
services:
# Product service
ProductBundle/:
resource: ''../../src/ProductBundle/*''
exclude: ''../../src/ProductBundle/{Entity,Repository,Tests}''