Php Symfony2中的配置

Php Symfony2中的配置,php,symfony,symfony-2.4,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中,

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

基本上,我有一个“经典”的结构

app/config/*.yml拥有各种全局配置和每环境路由

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

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

问题是:

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

在ApiBundle中,我需要为同一kernel.exception定义不同的侦听器,以便在异常情况下触发ApiBundle处理的路由

我怎么能有这个?到目前为止,似乎在定义侦听器的AppKernel中加载的最后一个包覆盖了侦听器,并且它在所有情况下都会触发,而不管路由或包是什么

有没有“symfony”的方法?在我看来,捆绑包应该是相当独立的


谢谢

我不知道是否有办法实现您想要的功能,但您也可以使用一个侦听器并根据事件来自哪个包来处理事件:

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
}
}
}

信用证:

查看侦听器优先级:。你必须在每个捆绑包中设置优先级,以确定谁先走,但这并不太糟糕。谢谢,这并不是我所希望的,但它将通过捆绑包托管共享项目来工作。谢谢