diff --git a/ArgumentValidator.php b/ArgumentValidator.php index 74de726..3dc38a5 100644 --- a/ArgumentValidator.php +++ b/ArgumentValidator.php @@ -8,6 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\ExpressionLanguage; +use Symfony\Component\DependencyInjection\Parameter; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\ExpressionLanguage\SyntaxError; @@ -41,6 +42,10 @@ public function validate(\ReflectionParameter $parameter, $argument) private function validateArrayArgument($argument) { + if ($argument instanceof Parameter) { + $argument = $this->containerBuilder->getParameter($argument); + } + if (!is_array($argument)) { throw new TypeHintMismatchException(sprintf( 'Argument of type "%s" should have been an array', diff --git a/ResultingClassResolver.php b/ResultingClassResolver.php index 58815b5..2c7b423 100644 --- a/ResultingClassResolver.php +++ b/ResultingClassResolver.php @@ -4,6 +4,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Parameter; class ResultingClassResolver implements ResultingClassResolverInterface { @@ -18,6 +19,10 @@ public function resolve(Definition $definition) { $class = $definition->getClass(); + if ($class instanceof Parameter) { + $class = $this->containerBuilder->getParameter($class); + } + return $this->resolvePlaceholders($class); } diff --git a/Tests/ResultingClassResolverTest.php b/Tests/ResultingClassResolverTest.php index 48cb6c6..a9a9e32 100644 --- a/Tests/ResultingClassResolverTest.php +++ b/Tests/ResultingClassResolverTest.php @@ -5,6 +5,7 @@ use Matthias\SymfonyServiceDefinitionValidator\ResultingClassResolver; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Parameter; class ResultingClassResolverTest extends \PHPUnit_Framework_TestCase { @@ -21,13 +22,16 @@ public function testResolvesClassOfDefinition() { $containerBuilder = new ContainerBuilder(); $containerBuilder->setParameter('definition.class', 'stdClass'); + $containerBuilder->setParameter('definition2.class', 'stdClass'); $resolver = new ResultingClassResolver($containerBuilder); $definition = new Definition('%definition.class%'); - $resolvedClass = $resolver->resolve($definition); + $this->assertSame('stdClass', $resolvedClass); + $definition2 = new Definition(new Parameter('definition2.class')); + $resolvedClass = $resolver->resolve($definition2); $this->assertSame('stdClass', $resolvedClass); } }