Unify the way to provide expression functions for the DI container

Function providers registered on the ContainerBuilder are now reused by
the PhpDumper when dumping the container instead of forcing to register
them again.
Closes #13012
This commit is contained in:
Christophe Coevoet 2014-12-17 10:56:43 +01:00
parent c18cb4c7b2
commit 8425e4d9d0
2 changed files with 15 additions and 1 deletions

View File

@ -1075,6 +1075,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
$this->expressionLanguageProviders[] = $provider;
}
/**
* @return ExpressionFunctionProviderInterface[]
*/
public function getExpressionLanguageProviders()
{
return $this->expressionLanguageProviders;
}
/**
* Returns the Service Conditionals.
*

View File

@ -1399,6 +1399,11 @@ EOF;
return sprintf("\$this->getParameter('%s')", strtolower($name));
}
/**
* @deprecated Deprecated since 2.6.2, to be removed in 3.0. Use Symfony\Component\DependencyInjection\ContainerBuilder::addExpressionLanguageProvider instead.
*
* @param ExpressionFunctionProviderInterface $provider
*/
public function addExpressionLanguageProvider(ExpressionFunctionProviderInterface $provider)
{
$this->expressionLanguageProviders[] = $provider;
@ -1493,7 +1498,8 @@ EOF;
if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) {
throw new RuntimeException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.');
}
$this->expressionLanguage = new ExpressionLanguage(null, $this->expressionLanguageProviders);
$providers = array_merge($this->container->getExpressionLanguageProviders(), $this->expressionLanguageProviders);
$this->expressionLanguage = new ExpressionLanguage(null, $providers);
}
return $this->expressionLanguage;