[DependencyInjection] Adding to InvalidArgumentException messages to clarify when a service is given an invalid "tags" value.

This commit is contained in:
Ryan Weaver 2011-02-17 08:31:50 -06:00 committed by Fabien Potencier
parent a0fc4240f9
commit c5e4dfb5a6
4 changed files with 43 additions and 0 deletions

View File

@ -239,7 +239,15 @@ class YamlFileLoader extends FileLoader
}
if (isset($service['tags'])) {
if (!is_array($service['tags'])) {
throw new \InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s.', $id, $file));
}
foreach ($service['tags'] as $tag) {
if (!isset($tag['name'])) {
throw new \InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key must be an array for service "%s" in %s.', $id, $file));
}
$name = $tag['name'];
unset($tag['name']);

View File

@ -0,0 +1,5 @@
services:
foo_service:
class: FooClass
# tags is not an array
tags: string

View File

@ -0,0 +1,6 @@
services:
foo_service:
class: FooClass
tags:
# tag is missing the name key
foo_tag: { foo: bar }

View File

@ -166,6 +166,30 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
$interface = $interfaces['FooClass'];
$this->assertTrue($interface->hasMethodCall('setBar'), '->load() parses interfaces elements');
}
public function testNonArrayTagThrowsException()
{
$loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
try {
$loader->load('badtag1.yml');
$this->fail('->load() should throw an exception when the tags key of a service is not an array');
} catch (\Exception $e) {
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the tags key is not an array');
$this->assertStringStartsWith('Parameter "tags" must be an array for service', $e->getMessage(), '->load() throws an InvalidArgumentException if the tags key is not an array');
}
}
public function testTagWithoutNameThrowsException()
{
$loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
try {
$loader->load('badtag2.yml');
$this->fail('->load() should throw an exception when a tag is missing the name key');
} catch (\Exception $e) {
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if a tag is missing the name key');
$this->assertStringStartsWith('A "tags" entry is missing a "name" key must be an array for service ', $e->getMessage(), '->load() throws an InvalidArgumentException if a tag is missing the name key');
}
}
}
class ProjectLoader3 extends YamlFileLoader