4

我的服务中定义的FunctiongetCurrentOrDefaultLocale()可以从控制器或通过命令行脚本调用。

从 CLI访问request服务会引发异常,我正在使用它来检测 CLI 调用。但是,仅为此目的捕获异常对我来说似乎很糟糕。

是否有任何可靠的方法来检查请求是否可以在当前上下文(执行,浏览器与 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();
}
4

1 回答 1

8

您可以使用/简单地检查当前容器实例是否具有request服务/范围。ContainerInterface::has()ContainerInterface::hasScope()

编辑:

我的错。您必须使用ContainerInterface::isScopeActive(), 来确定request服务是否功能齐全:

public function __construct(ContainerInterface $container, RouterInterface $router) {
    if ($container->isScopeActive('request')) {
        $this->request = $container->get('request');
        $this->router = $router;
    }
}

这段代码来自我自己的项目,在那里我遇到了一个非常相似的问题。

于 2012-12-22T01:03:22.053 回答