Documentação do Symfony2
Renderizada do repositório symfony-docs-pt-BR no Github
Você já viu como usar os parâmetros de configuração nos contêineres de serviço do Symfony. Há casos especiais, como quando você quer, por exemplo, usar o parâmetro %kernel.debug% para fazer os serviços em seu bundle entrarem no modo de depuração. Para esse caso, há mais trabalho a ser feito, a fim de fazer com que o sistema compreenda o valor do parâmetro. Por padrão, seu parâmetro %kernel.debug% será tratado como uma string simples. Veja este exemplo com o AcmeDemoBundle:
// Inside Configuration class
$rootNode
->children()
->booleanNode('logging')->defaultValue('%kernel.debug%')->end()
// ...
->end()
;
// Inside the Extension class
$config = $this->processConfiguration($configuration, $configs);
var_dump($config['logging']);
Agora, examine os resultados para ver isso de perto:
A fim de suportar esse caso de uso, a classe Configuration tem que ser injetada com esse parâmetro, através de extensão, da seguinte forma:
namespace Acme\DemoBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
private $debug;
public function __construct($debug)
{
$this->debug = (Boolean) $debug;
}
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('acme_demo');
$rootNode
->children()
// ...
->booleanNode('logging')->defaultValue($this->debug)->end()
// ...
->end()
;
return $treeBuilder;
}
}
E definir ele no construtor de Configuration através da classe Extension:
namespace Acme\DemoBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Config\FileLocator;
class AcmeDemoExtension extends Extension
{
// ...
public function getConfiguration(array $config, ContainerBuilder $container)
{
return new Configuration($container->getParameter('kernel.debug'));
}
}