Eu adicionei uma configuração ao meu arquivo config.yml da seguinte forma:
app.config:
contact_email: somebody@gmail.com
...
Pela minha vida, não consigo descobrir como lê-lo em uma variável. Eu tentei algo assim em um dos meus controladores:
$recipient =
$this->container->getParameter('contact_email');
Mas eu recebo um erro dizendo:
O parâmetro "contact_email" deve ser definido.
Limpei meu cache, também procurei em todos os lugares a documentação do site recarregada pelo Symfony2, mas não consigo descobrir como fazer isso.
Provavelmente cansado demais para descobrir isso agora. Alguém pode ajudar com isso?
symfony
configuration
josef.van.niekerk
fonte
fonte
swiftmailer: delivery_address: [email protected]
Você pode encontrar mais informações no livro de receitas%parameter_name%
- notação (em YAML)Embora a solução de mover
contact_email
para toparameters.yml
seja fácil, conforme proposto em outras respostas, isso pode facilmente confundir seu arquivo de parâmetros se você lidar com muitos pacotes configuráveis ou se você lidar com blocos de configuração aninhados.PRIMEIRA ABORDAGEM: Bloco de configuração separado, obtendo-o como parâmetro
Com uma extensão ( mais sobre extensões aqui ), você pode mantê-la facilmente "separada" em diferentes blocos no
config.yml
e, em seguida, injetar isso como um parâmetro que pode ser obtido do controlador.Dentro da classe Extension dentro do
DependencyInjection
diretório, escreva isto:Em seguida, no seu config.yml, config_dev.yml e assim você pode definir
Para poder processar isso
config.yml
dentro do seu,MyNiceBundleExtension
você também precisará de umaConfiguration
classe no mesmo espaço para nome:Em seguida, você pode obter a configuração do seu controlador, conforme desejado na sua pergunta original, mas mantendo-a
parameters.yml
limpa e configurando-aconfig.yml
nas seções separadas:SEGUNDA ABORDAGEM: Bloco de configuração separado, injetando a configuração em um serviço
Para os leitores que procuram algo semelhante, mas para obter a configuração de um serviço, existe uma maneira ainda melhor que nunca atrapalha o espaço comum "paramaters" e nem precisa do
container
ser passado para o serviço (passar o contêiner inteiro é prática evitar).Este truque acima ainda "injeta" no espaço de parâmetros sua configuração.
No entanto, depois de carregar sua definição do serviço, você pode adicionar uma chamada de método, como por exemplo
setConfig()
que injeta esse bloco apenas no serviço.Por exemplo, na classe Extension:
Então, no seu,
services.yml
você define seu serviço como de costume, sem nenhuma alteração absoluta:E então na sua
SillyManager
turma, basta adicionar o método:Observe que isso também funciona para matrizes em vez de valores escalares! Imagine que você configure uma fila de coelhos e precisa de host, usuário e senha:
Claro que você precisa mudar sua Árvore, mas pode fazer:
e depois no serviço faça:
Espero que isto ajude!
fonte
MyNiceProjectExtension->load()
método com esta linha:$container->setParameter( 'my_nice_project.contact_email', $processedConfig[ 'contact_email' ]);
. Obrigado Xavi!Eu tenho que adicionar à resposta de douglas, você pode acessar a configuração global, mas o symfony traduz alguns parâmetros, por exemplo:
estão
Você pode usar var_dump para procurar uma chave ou valor especificado.
fonte
Para poder expor alguns parâmetros de configuração do seu pacote, consulte a documentação para fazê-lo. É bastante fácil de fazer :)
Aqui está o link: Como expor uma configuração semântica para um pacote
fonte
Como foi dito anteriormente - você pode acessar qualquer parâmetro usando o contêiner de injeção e usar sua propriedade de parâmetro.
"Symfony - Trabalhando com definições de serviço de contêiner" é um bom artigo sobre isso.
fonte
Aprendi uma maneira fácil com o exemplo de código de http://tutorial.symblog.co.uk/
1) observe o ZendeskBlueFormBundle e o local do arquivo
2) observe o Zendesk_BlueForm.emails.contact_email e o local do arquivo
3) observe como o consigo em $ client e local do arquivo do controlador
fonte