Este equipo especializado pasados varios días de trabajo y recopilación de de información, dieron con la solución, nuestro deseo es que te resulte útil en tu trabajo.
Solución:
Las clases de entidad predeterminadas generadas por la consola no heredan nada. Esto significa que no son “ContainerAware” de ninguna manera.
Y en términos generales, no creo que deban serlo. Supuse que depende de lo que estés haciendo, pero podrías manejar esto con una inyección de dependencia básica.
En un controlador:
$entity = new YourBundleEntityFoo(
$this->container->get( 'kernel' )->getEnvironment()
);
y luego en src/Tu/Paquete/Entidad/Foo.php
private $env;
public function __construct( $env=null )
$this->env = $env;
Que este trabajo para usted?
PD: el detector de eventos sobre el que publicaste es para controladores, no para clases arbitrarias.
También es posible obtener eso como un parámetro. Si echas un vistazo a la SymfonyComponentHttpKernelKernel
clase encontrarás un getKernelParameters()
método que expone todos los parámetros del kernel.
/**
* Returns the kernel parameters.
*
* @return array An array of kernel parameters
*/
protected function getKernelParameters()
$bundles = array();
foreach ($this->bundles as $name => $bundle)
$bundles[$name] = get_class($bundle);
return array_merge(
array(
'kernel.root_dir' => realpath($this->rootDir) ?: $this->rootDir,
'kernel.environment' => $this->environment,
'kernel.debug' => $this->debug,
'kernel.name' => $this->name,
'kernel.cache_dir' => realpath($this->getCacheDir()) ?: $this->getCacheDir(),
'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(),
'kernel.bundles' => $bundles,
'kernel.charset' => $this->getCharset(),
'kernel.container_class' => $this->getContainerClass(),
),
$this->getEnvParameters()
);
así que en un services.yml
archivo con el que puede obtener el entorno %kernel.environment%
mientras que en una clase consciente de contenedores, puede obtenerlo haciendo:
$this->getContainer()->getParameter('kernel.environment');
ver la clase Kernel.php en github
Por supuesto, existe la forma rápida y sucia de los globales…
function quickAndDirty()
global $kernel;
if ($kernel->getEnvironment() == 'dev')
// we're in dev mode
Es malo y malo y deberías lavarte después de usarlo, pero en el caso de una gran base de código existente que quizás hayas heredado, evita una posible pesadilla de refactorización.
Por supuesto, si puedes vivir contigo mismo después de usar dicho método, depende de ti;)
Sección de Reseñas y Valoraciones
Si entiendes que te ha sido provechoso este artículo, sería de mucha ayuda si lo compartieras con otros programadores de esta forma nos ayudas a difundir este contenido.