Symfony2中的配置

时间:2015-01-29 13:35:16

标签: php symfony symfony-2.4

我正在努力解决Symfony2捆绑包之间的配置问题。

基本上,我有一个'经典'结构。

app / config / * .yml包含各种全局配置和每个环境路径

/ src / Item1 / Bundle1到Bundle10是一些定义核心应用程序的包

/ src / Api / ApiBundle是一个定义“api”的捆绑包(我喜欢将其视为REST的一组Web服务)

问题:

Bundle1为在Bundle1到10之间共享的kernel.exception定义了一个ExceptionListener。

在ApiBundle中,我需要为同一个kernel.exception定义一个不同的Listener,这样对于ApiBundle处理的路由,它会在异常情况下触发。

我该怎么办?到目前为止,似乎在AppKernel中加载的最后一个包定义了监听器的包覆盖了监听器,并且它在所有情况下都会触发,无论路由或包是什么。

有没有'symfony'的方法呢?对我而言,捆绑应该是相当独立的。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道是否有办法实现你想要的东西,但是你也可以有一个监听器来处理事件,具体取决于它来自哪个捆绑包:

namespace Your\MainBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class YourExceptionListener
{ 
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$namespace = new \ReflectionObject( $event->getController() )->getNamespaceName();

switch ( $namespace )
{
  case 'Acme\\DemoBundle':
    // do whatever with $exception here
    break;
  case 'Item1\\Bundle1':
    // do whatever with $exception here
    break;
  case 'Api\\ApiBundle':
    // do whatever with $exception here
    break;
  default;
    // default
}
}
}

致谢:https://stackoverflow.com/a/11125009/1591238