Symfony2 中的配置
Configurations in Symfony2
我正在努力解决 Symfony2 包之间的配置问题。
基本上,我有一个'classic'结构。
app/config/*.yml 包含各种全局配置和每个环境路由
/src/Item1/Bundle1到Bundle10是一些定义核心应用程序的bundle
/src/Api/ApiBundle 是定义 "api"(我喜欢将其视为 REST 的一组 Web 服务)
的包
问题:
Bundle1 为 kernel.exception 定义了一个在 Bundle1 到 10 之间共享的 ExceptionListener。
在 ApiBundle 中,我需要为同一个 kernel.exception 定义一个不同的监听器,以便 ApiBundle 处理的路由在异常情况下触发。
我怎么能有这个?到目前为止,似乎最后一个加载到 AppKernel 中定义监听器的 bundle 覆盖了监听器,并且它在所有情况下都会触发,而不管路由或 bundle。
有'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
}
}
}
致谢:
我正在努力解决 Symfony2 包之间的配置问题。
基本上,我有一个'classic'结构。
app/config/*.yml 包含各种全局配置和每个环境路由
/src/Item1/Bundle1到Bundle10是一些定义核心应用程序的bundle
/src/Api/ApiBundle 是定义 "api"(我喜欢将其视为 REST 的一组 Web 服务)
的包问题:
Bundle1 为 kernel.exception 定义了一个在 Bundle1 到 10 之间共享的 ExceptionListener。
在 ApiBundle 中,我需要为同一个 kernel.exception 定义一个不同的监听器,以便 ApiBundle 处理的路由在异常情况下触发。
我怎么能有这个?到目前为止,似乎最后一个加载到 AppKernel 中定义监听器的 bundle 覆盖了监听器,并且它在所有情况下都会触发,而不管路由或 bundle。
有'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
}
}
}
致谢: