Конфигурации в Symfony2

Я борюсь с проблемой конфигурации между пакетами Symfony2.

По сути, у меня есть «классическая» структура.

app / config / *. yml содержит различные глобальные конфигурации и маршруты для каждой среды

/ src / Item1 / Bundle1 — Bundle10 — это несколько пакетов, которые определяют основное приложение

/ src / Api / ApiBundle — это пакет, который определяет «api» (набор веб-сервисов, который мне нравится рассматривать как REST)

Проблема:

Bundle1 определяет ExceptionListener для kernel.exception, который совместно используется Bundle1 до 10.

В ApiBundle мне нужно определить другой Listener для того же ядра.exception, чтобы для маршрутов, обрабатываемых ApiBundle, он срабатывал в исключительных случаях.

Как я могу получить это? До сих пор кажется, что последний пакет, загруженный в AppKernel, который определяет прослушиватель, переопределяет прослушиватель и запускается во всех случаях независимо от маршрутов или пакетов.

Есть ли способ «Symfony» сделать это? Мне кажется, что связки должны быть достаточно независимыми.

Спасибо!

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]