.. index::
single: Ambientes; Parâmetros Externos
Como definir Parâmetros Externos no Container de Serviços
=========================================================
No capítulo :doc:`/cookbook/configuration/environments`, você aprendeu como gerenciar
a configuração da sua aplicação. Às vezes, armazenar certas credenciais fora do
código do seu projeto pode beneficiar a sua aplicação. A configuração do banco de dados
é um exemplo. A flexibilidade do container de serviço do Symfony permite à
você fazer isso facilmente.
Variáveis de Ambiente
---------------------
O Symfony vai pegar qualquer variável de ambiente com o prefixo ``SYMFONY__`` e
setá-la como um parâmetro no container de serviço. Sublinhados duplos são substituídos
por um ponto, pois o ponto não é um caracter válido no nome de uma variável de
ambiente.
Por exemplo, se você está usando o Apache, as variáveis de ambiente podem ser definidas
utilizando a seguinte configuração ``VirtualHost``:
.. code-block:: apache
ServerName Symfony2
DocumentRoot "/path/to/symfony_2_app/web"
DirectoryIndex index.php index.html
SetEnv SYMFONY__DATABASE__USER user
SetEnv SYMFONY__DATABASE__PASSWORD secret
AllowOverride All
Allow from All
.. note::
O exemplo acima é para uma configuração Apache, usando a diretiva
`SetEnv`_. No entanto, isso vai funcionar para qualquer servidor web que
suporte a definição de variáveis de ambiente.
Além disso, para que o seu console funcione (que não usa Apache), você deve
exportar estas como variáveis shell. Em um sistema Unix, você pode executar
o seguinte:
.. code-block:: bash
$ export SYMFONY__DATABASE__USER=user
$ export SYMFONY__DATABASE__PASSWORD=secret
Agora que você declarou uma variável de ambiente, ela estará presente na
variável global ``$_SERVER`` do PHP. O Symfony, então, automaticamente define todas
as variáveis ``$_SERVER`` prefixadas com ``SYMFONY__`` como parâmetros no container
de serviços.
Agora, você pode referenciar estes parâmetros em qualquer local onde precisar deles.
.. configuration-block::
.. code-block:: yaml
doctrine:
dbal:
driver pdo_mysql
dbname: symfony2_project
user: "%database.user%"
password: "%database.password%"
.. code-block:: xml
.. code-block:: php
$container->loadFromExtension('doctrine', array('dbal' => array(
'driver' => 'pdo_mysql',
'dbname' => 'symfony2_project',
'user' => '%database.user%',
'password' => '%database.password%',
));
Constantes
----------
O container também possui suporte para definir constantes do PHP como parâmetros. Para
aproveitar esse recurso, mapeie o nome da sua constante para uma chave de parâmetro
, e defina o tipo como ``constant``.
.. code-block:: xml
GLOBAL_CONSTANT
My_Class::CONSTANT_NAME
.. note::
Isso funciona somente para a configuração XML. Se você *não* está usando XML, simplesmente
importe um arquivo XML para aproveitar essa funcionalidade:
.. code-block:: yaml
# app/config/config.yml
imports:
- { resource: parameters.xml }
Configurações Diversas
----------------------
A diretiva ``imports`` pode ser usada para puxar os parâmetros armazenados em outro lugar.
Importando um arquivo PHP lhe dá a flexibilidade para adicionar o que for necessário
no container. O seguinte importa um arquivo chamado ``parameters.php``.
.. configuration-block::
.. code-block:: yaml
# app/config/config.yml
imports:
- { resource: parameters.php }
.. code-block:: xml
.. code-block:: php
// app/config/config.php
$loader->import('parameters.php');
.. note::
Um arquivo de recursos pode ser um de muitos tipos. PHP, XML, YAML, INI e
recursos de closure são todos suportados pela directiva ``imports``.
No ``parameters.php``, diga ao container de serviço os parâmetros que você deseja
definir. Isto é útil quando alguma configuração importante está em um formato fora do
padrão. O exemplo abaixo inclui a configuração de um banco de dados do Drupal no
container de serviço do Symfony.
.. code-block:: php
// app/config/parameters.php
include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);
.. _`SetEnv`: http://httpd.apache.org/docs/current/env.html