symfony2 generate entitymanagerinterface consultas symfony doctrine2

generate - Dispositivos de datos específicos del entorno con Symfony+Doctrine



generate entity symfony (2)

La forma más sencilla es colocar los dispositivos en diferentes carpetas y luego cargarlos con la php app/console doctrine:fixtures:load --fixtures=../src/Acme/TestBundle/DataFixtures/ORM/test . La opción de accesorios debe apuntar a la ruta relativa desde donde se encuentra la carpeta de aplicaciones.

Luego, puede dividir sus datos en iniciales, pruebas, etc., o crear dispositivos de desarrollo, pruebas, escenarios, productos, como desee.

Si desea mezclarlos, no conozco ninguna solución mejor que la que hice: creo una carpeta de "plantillas" donde residen todos los dispositivos. En mi carpeta de desarrollo, creo una clase que extiende la clase de artefactos adecuada. plantilla y ajusta lo que se necesita para ajustar (como anular el método getOrder ). No es perfecto y supongo que se podría pensar en extender los dispositivos: cargar el comando para tomar varias rutas, pero a mí me funciona.

Con Smyfony2 y Doctrin2, los dispositivos de datos se pueden crear usando el siguiente ejemplo: http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html

Lo que me gustaría es poder usar este concepto para las pruebas, de modo que la configuración / desmontaje pueda crear un entorno de datos de prueba puros para las pruebas funcionales. ¿Cómo puedo tener un conjunto específico de dispositivos de prueba solo durante las pruebas funcionales y cómo separar estos dispositivos de mis dispositivos estándar para que el comando de la consola los ignore?

Parece que la forma de hacerlo sería replicar la funcionalidad de la doctrina: el comando de la consola de los dispositivos y almacenar los dispositivos de prueba en otro lugar. ¿Alguien tiene una solución mejor?


Una alternativa a romper los aparatos por directorio es usar una clase de aparatos personalizada. Tus clases de aparatos extenderían esta clase y especificarían los entornos en los que se cargará.

<?php use Doctrine/Common/DataFixtures/FixtureInterface; use Doctrine/Common/Persistence/ObjectManager; use Symfony/Component/DependencyInjection/ContainerAwareInterface; use Symfony/Component/DependencyInjection/ContainerInterface; use Symfony/Component/HttpKernel/KernelInterface; /** * Provides support for environment specific fixtures. * * This container aware, abstract data fixture is used to only allow loading in * specific environments. The environments the data fixture will be loaded in is * determined by the list of environment names returned by `getEnvironments()`. * * > The fixture will still be shown as having been loaded by the Doctrine * > command, `doctrine:fixtures:load`, despite not having been actually * > loaded. * * @author Kevin Herrera <[email protected]> */ abstract class AbstractDataFixture implements ContainerAwareInterface, FixtureInterface { /** * The dependency injection container. * * @var ContainerInterface */ protected $container; /** * {@inheritDoc} */ public function load(ObjectManager $manager) { /** @var KernelInterface $kernel */ $kernel = $this->container->get(''kernel''); if (in_array($kernel->getEnvironment(), $this->getEnvironments())) { $this->doLoad($manager); } } /** * {@inheritDoc} */ public function setContainer(ContainerInterface $container = null) { $this->container = $container; } /** * Performs the actual fixtures loading. * * @see /Doctrine/Common/DataFixtures/FixtureInterface::load() * * @param ObjectManager $manager The object manager. */ abstract protected function doLoad(ObjectManager $manager); /** * Returns the environments the fixtures may be loaded in. * * @return array The name of the environments. */ abstract protected function getEnvironments(); }

Tus accesorios acabarían pareciéndose a esto:

<?php namespace Vendor/Bundle/ExampleBundle/DataFixtures/ORM; use AbstractDataFixture; use Doctrine/Common/Persistence/ObjectManager; /** * Loads data only on "prod". */ class ExampleData extends AbstractDataFixture { /** * @override */ protected function doLoad(ObjectManager $manager) { // ... snip ... } /** * @override */ protected function getEnvironments() { return array(''prod''); } }

Creo que esto debería funcionar tanto con ORM como con los accesorios de datos ODM.