[DI] Throw on "configured-keys <> getSubscribedServices()" mismatch

This commit is contained in:
Nicolas Grekas 2017-03-27 20:07:18 +02:00
parent d0e904b0da
commit 4da8884ca4
4 changed files with 23 additions and 3 deletions

View File

@ -92,7 +92,8 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass
}
if ($serviceMap = array_keys($serviceMap)) {
$this->container->log($this, sprintf('Service keys "%s" do not exist in the map returned by %s::getSubscribedServices() for service "%s".', implode('", "', $serviceMap), $class, $this->currentId));
$message = sprintf(1 < count($serviceMap) ? 'keys "%s" do' : 'key "%s" does', str_replace('%', '%%', implode('", "', $serviceMap)));
throw new InvalidArgumentException(sprintf('Service %s not exist in the map returned by %s::getSubscribedServices() for service "%s".', $message, $class, $this->currentId));
}
$serviceLocator = $this->serviceLocator;

View File

@ -115,4 +115,23 @@ class RegisterServiceSubscribersPassTest extends TestCase
$this->assertEquals($expected, $locator->getArgument(0));
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
* @expectedExceptionMessage Service key "test" does not exist in the map returned by TestServiceSubscriber::getSubscribedServices() for service "foo_service".
*/
public function testExtraServiceSubscriber()
{
$container = new ContainerBuilder();
$container->register('foo_service', 'TestServiceSubscriber')
->setAutowired(true)
->addArgument(new Reference('container'))
->addTag('container.service_subscriber', array(
'key' => 'test',
'id' => 'TestServiceSubscriber',
))
;
$container->register('TestServiceSubscriber', 'TestServiceSubscriber');
$container->compile();
}
}

View File

@ -561,7 +561,7 @@ class PhpDumperTest extends TestCase
->setAutowired(true)
->addArgument(new Reference('container'))
->addTag('container.service_subscriber', array(
'key' => 'test',
'key' => 'bar',
'id' => 'TestServiceSubscriber',
))
;

View File

@ -102,7 +102,7 @@ class ProjectServiceContainer extends Container
}, 'stdClass' => function () {
$f = function (\stdClass $v = null) { return $v; }; return $f(${($_ = isset($this->services['autowired.stdClass']) ? $this->services['autowired.stdClass'] : $this->getAutowired_StdClassService()) && false ?: '_'});
}, 'bar' => function () {
$f = function (\stdClass $v) { return $v; }; return $f(${($_ = isset($this->services['autowired.stdClass']) ? $this->services['autowired.stdClass'] : $this->getAutowired_StdClassService()) && false ?: '_'});
$f = function (\stdClass $v) { return $v; }; return $f(${($_ = isset($this->services['TestServiceSubscriber']) ? $this->services['TestServiceSubscriber'] : $this->get('TestServiceSubscriber')) && false ?: '_'});
}, 'baz' => function () {
$f = function (\stdClass $v = null) { return $v; }; return $f(${($_ = isset($this->services['autowired.stdClass']) ? $this->services['autowired.stdClass'] : $this->getAutowired_StdClassService()) && false ?: '_'});
})));