我想知道我是否在监听器中使用 app_dev.php(在 config.yml
中设置为服务)。尽管这是我在 Controller 中使用的方法,但它在 getEnvironment() 处失败。
public function onKernelResponse(FilterResponseEvent $event) {
$kernel = $event->getKernel();
$this->isAppDev = ($kernel->getEnvironment() == "dev") ? true : false;
}
编辑解决方案: 在我的监听器类中:
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\Kernel;
private $kernel;
public function __construct(Kernel $kernel) {
$this->kernel = $kernel
}
public function onKernelResponse(FilterResponseEvent $event) {
$this->isAppDev = ($this->kernel->getEnvironment() == "dev") ? true : false;
}
在 config.yml 底部:
services:
my.listener:
class: Path\To\Listener
tags:
- { name: kernel.event_listener, event: kernel.response }
arguments: [@kernel]
最佳答案
$event->getKernel()返回一个实现 HttpKernelInterface 的对象。而Kernel或 AppKernel
实现 KernelInterface其中有 getEnvironment
方法。您必须在监听器中注入(inject) @kernel
服务。
关于Symfony2 在响应监听器中获取当前环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486173/