services run parameter container symfony doctrine fixtures symfony3.4

run - Symfony 3.4.0 no pudo encontrar ningún servicio de dispositivo para cargar



symfony 4 service (9)

Estoy usando Symfony 3.4.0, intento cargar dispositivos con:

php bin/console doctrine:fixtures:load

Se produjo un error al crear los datos, ¿qué ocurre?


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 a DataFixtures en la configuración de sevice.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()



~ / 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}''