【问题标题】:Configurations in Symfony2Symfony2 中的配置
【发布时间】:2015-01-29 13:35:16
【问题描述】:

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

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

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

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

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

问题:

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

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

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

有没有一种“symfony”的方式来做到这一点?在我看来,捆绑包应该是相当独立的。

谢谢!

【问题讨论】:

标签: php symfony symfony-2.4


【解决方案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

【讨论】:

  • 谢谢,这并不是我真正希望的,但它可以通过 Bundle 托管共享项目来实现。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-02-10
  • 2013-11-18
  • 2012-12-02
  • 2011-09-16
  • 2014-09-22
  • 2012-03-17
  • 2012-05-08
  • 2016-11-07
相关资源
最近更新 更多