X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fdependency-injection%2FCompiler%2FCheckDefinitionValidityPass.php;h=d7d44d90ce6d979a9d89200600d1a4c866a4e927;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=e54ee60abbcaf1c2e3eb6f0d9c1541fb27d31cc3;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php b/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php index e54ee60ab..d7d44d90c 100644 --- a/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php +++ b/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php @@ -11,8 +11,8 @@ namespace Symfony\Component\DependencyInjection\Compiler; -use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\EnvParameterException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** @@ -24,8 +24,6 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; * * - non synthetic, non abstract services always have a class set * - synthetic services are always public - * - synthetic services are always of non-prototype scope - * - shared services are always of non-prototype scope * * @author Johannes M. Schmitt */ @@ -34,37 +32,30 @@ class CheckDefinitionValidityPass implements CompilerPassInterface /** * Processes the ContainerBuilder to validate the Definition. * - * @param ContainerBuilder $container - * * @throws RuntimeException When the Definition is invalid */ public function process(ContainerBuilder $container) { foreach ($container->getDefinitions() as $id => $definition) { // synthetic service is public - if ($definition->isSynthetic() && !$definition->isPublic()) { + if ($definition->isSynthetic() && !($definition->isPublic() || $definition->isPrivate())) { throw new RuntimeException(sprintf('A synthetic service ("%s") must be public.', $id)); } - // synthetic service has non-prototype scope - if ($definition->isSynthetic() && ContainerInterface::SCOPE_PROTOTYPE === $definition->getScope(false)) { - throw new RuntimeException(sprintf('A synthetic service ("%s") cannot be of scope "prototype".', $id)); - } - - // shared service has non-prototype scope - if ($definition->isShared() && ContainerInterface::SCOPE_PROTOTYPE === $definition->getScope(false)) { - throw new RuntimeException(sprintf('A shared service ("%s") cannot be of scope "prototype".', $id)); - } - - if ($definition->getFactory() && ($definition->getFactoryClass(false) || $definition->getFactoryService(false) || $definition->getFactoryMethod(false))) { - throw new RuntimeException(sprintf('A service ("%s") can use either the old or the new factory syntax, not both.', $id)); - } - // non-synthetic, non-abstract service has class if (!$definition->isAbstract() && !$definition->isSynthetic() && !$definition->getClass()) { - if ($definition->getFactory() || $definition->getFactoryClass(false) || $definition->getFactoryService(false)) { + if ($definition->getFactory()) { throw new RuntimeException(sprintf('Please add the class to service "%s" even if it is constructed by a factory since we might need to add method calls based on compile-time checks.', $id)); } + if (class_exists($id) || interface_exists($id, false)) { + throw new RuntimeException(sprintf( + 'The definition for "%s" has no class attribute, and appears to reference a ' + .'class or interface in the global namespace. Leaving out the "class" attribute ' + .'is only allowed for namespaced classes. Please specify the class attribute ' + .'explicitly to get rid of this error.', + $id + )); + } throw new RuntimeException(sprintf( 'The definition for "%s" has no class. If you intend to inject ' @@ -85,6 +76,22 @@ class CheckDefinitionValidityPass implements CompilerPassInterface } } } + + if ($definition->isPublic() && !$definition->isPrivate()) { + $resolvedId = $container->resolveEnvPlaceholders($id, null, $usedEnvs); + if (null !== $usedEnvs) { + throw new EnvParameterException(array($resolvedId), null, 'A service name ("%s") cannot contain dynamic values.'); + } + } + } + + foreach ($container->getAliases() as $id => $alias) { + if ($alias->isPublic() && !$alias->isPrivate()) { + $resolvedId = $container->resolveEnvPlaceholders($id, null, $usedEnvs); + if (null !== $usedEnvs) { + throw new EnvParameterException(array($resolvedId), null, 'An alias name ("%s") cannot contain dynamic values.'); + } + } } } }