Saltar al contenido

Accediendo a la variable de entorno AppKernel en Symfony 2

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *