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);
|
uasort($subscribers, $sortFunc);
|
||||||
foreach ($subscribers as $id => $instance) {
|
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)));
|
$em->addMethodCall('addEventSubscriber', array(new Reference($id)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,6 +82,10 @@ class RegisterEventListenersAndSubscribersPass implements CompilerPassInterface
|
|||||||
|
|
||||||
uasort($listeners, $sortFunc);
|
uasort($listeners, $sortFunc);
|
||||||
foreach ($listeners as $id => $instance) {
|
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(
|
$em->addMethodCall('addEventListener', array(
|
||||||
array_unique($instance['event']),
|
array_unique($instance['event']),
|
||||||
isset($instance['lazy']) && $instance['lazy'] ? $id : new Reference($id),
|
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\Bridge\Doctrine\DependencyInjection\CompilerPass\RegisterEventListenersAndSubscribersPass;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
|
|
||||||
class RegisterEventListenersAndSubscribersPassTest extends \PHPUnit_Framework_TestCase
|
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()
|
public function testProcessEventListenersWithPriorities()
|
||||||
{
|
{
|
||||||
$container = $this->createBuilder();
|
$container = $this->createBuilder();
|
||||||
|
Reference in New Issue
Block a user