session - example - ¿Detecta si se puede acceder al servicio de solicitud en Symfony 2?
symfony session lifetime (1)
Simplemente podría verificar si la instancia del contenedor actual tiene servicio / alcance de request
usando ContainerInterface::has()
/ ContainerInterface::hasScope()
.
EDITAR:
Mi error. ContainerInterface::isScopeActive()
utilizar ContainerInterface::isScopeActive()
para determinar si el servicio de request
es completamente funcional:
public function __construct(ContainerInterface $container, RouterInterface $router) {
if ($container->isScopeActive(''request'')) {
$this->request = $container->get(''request'');
$this->router = $router;
}
}
Este código cortado es de mi propio proyecto, donde he experimentado un problema muy similar.
La función getCurrentOrDefaultLocale()
, definida en mi servicio, puede invocarse desde un controlador o mediante un script de línea de comandos.
Acceder al servicio de request
desde CLI genera una excepción y la estoy usando para detectar la invocación de la CLI. Sin embargo, atrapar una excepción solo para este propósito me parece tan malo.
¿Hay alguna manera confiable de verificar si la solicitud es accesible en el contexto actual (de ejecución, navegador vs CLI)?
/**
* @return string
*/
protected function getCurrentOrDefaultLocale()
{
try {
$request = $this->container->get(''request'');
}
catch(InactiveScopeException $exception) {
return $this->container->getParameter(''kernel.default_locale'');
}
// With Symfony < 2.1.0 current locale is stored in the session
if(version_compare($this->sfVersion, ''2.1.0'', ''<'')) {
return $this->container->get(''session'')->getLocale();
}
// Symfony >= 2.1.0 current locale from the request
return $request->getLocale();
}