Disallow abstract definitions from doctrine event listener registration
This commit is contained in:
parent
fbf92e58cb
commit
cbcf513e36
@ -68,6 +68,10 @@ class RegisterEventListenersAndSubscribersPass implements CompilerPassInterface
|
||||
|
||||
uasort($subscribers, $sortFunc);
|
||||
foreach ($subscribers as $id => $instance) {
|
||||
if ($container->getDefinition($id)->isAbstract()) {
|
||||
throw new \InvalidArgumentException(sprintf('The abstract service "%s" cannot be tagged as a doctrine event subscriber.', $id));
|
||||
}
|
||||
|
||||
$em->addMethodCall('addEventSubscriber', array(new Reference($id)));
|
||||
}
|
||||
}
|
||||
@ -78,6 +82,10 @@ class RegisterEventListenersAndSubscribersPass implements CompilerPassInterface
|
||||
|
||||
uasort($listeners, $sortFunc);
|
||||
foreach ($listeners as $id => $instance) {
|
||||
if ($container->getDefinition($id)->isAbstract()) {
|
||||
throw new \InvalidArgumentException(sprintf('The abstract service "%s" cannot be tagged as a doctrine event listener.', $id));
|
||||
}
|
||||
|
||||
$em->addMethodCall('addEventListener', array(
|
||||
array_unique($instance['event']),
|
||||
isset($instance['lazy']) && $instance['lazy'] ? $id : new Reference($id),
|
||||
|
@ -13,6 +13,7 @@ namespace Symfony\Bridge\Doctrine\Tests\DependencyInjection\CompilerPass;
|
||||
|
||||
use Symfony\Bridge\Doctrine\DependencyInjection\CompilerPass\RegisterEventListenersAndSubscribersPass;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
|
||||
class RegisterEventListenersAndSubscribersPassTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
@ -23,6 +24,38 @@ class RegisterEventListenersAndSubscribersPassTest extends \PHPUnit_Framework_Te
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
public function testExceptionOnAbstractTaggedSubscriber()
|
||||
{
|
||||
$container = $this->createBuilder();
|
||||
|
||||
$abstractDefinition = new Definition('stdClass');
|
||||
$abstractDefinition->setAbstract(true);
|
||||
$abstractDefinition->addTag('doctrine.event_subscriber');
|
||||
|
||||
$container->setDefinition('a', $abstractDefinition);
|
||||
|
||||
$this->process($container);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
public function testExceptionOnAbstractTaggedListener()
|
||||
{
|
||||
$container = $this->createBuilder();
|
||||
|
||||
$abstractDefinition = new Definition('stdClass');
|
||||
$abstractDefinition->setAbstract(true);
|
||||
$abstractDefinition->addTag('doctrine.event_listener', array('event' => 'test'));
|
||||
|
||||
$container->setDefinition('a', $abstractDefinition);
|
||||
|
||||
$this->process($container);
|
||||
}
|
||||
|
||||
public function testProcessEventListenersWithPriorities()
|
||||
{
|
||||
$container = $this->createBuilder();
|
||||
|
Reference in New Issue
Block a user