Documentação do Symfony - versão 3.4
Renderizada do repositório symfony-docs-pt-BR no Github

Configurando o Symfony (e Ambientes)

Toda aplicação Symfony consiste de uma coleção de bundles que adicionam ferramentas úteis (serviços) ao seu projeto. Cada bundle pode ser personalizado através de arquivos de configuração que residem - por padrão - no diretório app/config.

Configuração: config.yml

O arquivo de configuração principal é chamado config.yml:

  • YAML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    # app/config/config.yml
    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
        - { resource: services.yml }
    
    framework:
        secret:          '%secret%'
        router:          { resource: '%kernel.root_dir%/config/routing.yml' }
        # ...
    
    # Twig Configuration
    twig:
        debug:            '%kernel.debug%'
        strict_variables: '%kernel.debug%'
    
    # ...
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        xmlns:twig="http://symfony.com/schema/dic/twig"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/symfony
            http://symfony.com/schema/dic/symfony/symfony-1.0.xsd
            http://symfony.com/schema/dic/twig
            http://symfony.com/schema/dic/twig/twig-1.0.xsd">
    
        <imports>
            <import resource="parameters.yml" />
            <import resource="security.yml" />
            <import resource="services.yml" />
        </imports>
    
        <framework:config secret="%secret%">
            <framework:router resource="%kernel.root_dir%/config/routing.xml" />
            <!-- ... -->
        </framework:config>
    
        <!-- Twig Configuration -->
        <twig:config debug="%kernel.debug%" strict-variables="%kernel.debug%" />
    
        <!-- ... -->
    </container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // app/config/config.php
    $this->import('parameters.yml');
    $this->import('security.yml');
    $this->import('services.yml');
    
    $container->loadFromExtension('framework', array(
        'secret' => '%secret%',
        'router' => array(
            'resource' => '%kernel.root_dir%/config/routing.php',
        ),
        // ...
    ));
    
    // Twig Configuration
    $container->loadFromExtension('twig', array(
        'debug'            => '%kernel.debug%',
        'strict_variables' => '%kernel.debug%',
    ));
    
    // ...
    

A maioria das teclas de nível superior - como `` e `` framework`` twig`` - são de configuração para um pacote específico (ou seja, FrameworkBundle e TwigBundle).

Configuração de Referência e Dumping

duas formas de saber quais chaves você pode configurar:

  1. Use a Seção de Referência;
  2. Use o comando config:dump-reference.

Por exemplo, se você deseja configurar algo no Twig, você pode ver um exemplo através do dump de todas as opções de configuração disponíveis, executando:

1
$ php bin/console config:dump-reference twig

A chave imports: Carregar outros Arquivos de Configuração

O arquivo principal de configuração do symfony é app/config/config.yml. Mas, para organização, ele também carrega outros arquivos de configuração através de sua chave imports:

  • YAML
    1
    2
    3
    4
    5
    6
    # app/config/config.yml
    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
        - { resource: services.yml }
    # ...
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        xmlns:twig="http://symfony.com/schema/dic/twig"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/symfony
            http://symfony.com/schema/dic/symfony/symfony-1.0.xsd
            http://symfony.com/schema/dic/twig
            http://symfony.com/schema/dic/twig/twig-1.0.xsd">
    
        <imports>
            <import resource="parameters.yml" />
            <import resource="security.yml" />
            <import resource="services.yml" />
        </imports>
    
        <!-- ... -->
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    // app/config/config.php
    $this->import('parameters.yml');
    $this->import('security.yml');
    $this->import('services.yml');
    
    // ...
    

A chave imports se parece muito com a função include() do PHP: os conteúdos de parameters.yml, security.yml e services.yml são lidos e carregados. Também é possível carregar arquivos XML ou PHP.

A chave parameters: Parâmetros (Variáveis)

Outra chave especial é chamada `` parameters``: é usada para definir variáveis ​​que podem ser referenciadas em qualquer outro arquivo de configuração. Por exemplo, em config.yml, um parâmetro locale é definido e, então, referenciado logo abaixo sob a chave `` framework``:

  • YAML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    # app/config/config.yml
    # ...
    
    parameters:
        locale: en
    
    framework:
        # ...
    
        # any string surrounded by two % is replaced by that parameter value
        default_locale:  "%locale%"
    
    # ...
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        xmlns:twig="http://symfony.com/schema/dic/twig"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/symfony
            http://symfony.com/schema/dic/symfony/symfony-1.0.xsd
            http://symfony.com/schema/dic/twig
            http://symfony.com/schema/dic/twig/twig-1.0.xsd">
    
        <!-- ... -->
        <parameters>
            <parameter key="locale">en</parameter>
        </parameters>
    
        <framework:config default-locale="%locale%">
            <!-- ... -->
        </framework:config>
    
        <!-- ... -->
    </container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    // app/config/config.php
    // ...
    
    $container->setParameter('locale', 'en');
    
    $container->loadFromExtension('framework', array(
        'default_locale' => '%locale%',
        // ...
    ));
    
    // ...
    

Você pode definir quaisquer nomes de parâmetros que desejar sob a chave parameters de qualquer arquivo de configuração. Para fazer referência a um parâmetro, envolva seu nome com dois sinais de porcentagem - por exemplo, %locale%.

See also

Você também pode definir os parâmetros de forma dinâmica, como a partir de variáveis ​​de ambiente. Veja Como definir Parâmetros Externos no Container de Serviços.

Para mais informações sobre parâmetros - incluindo como referênciá-los dentro de um controlador - veja service-container-parameters.

O Arquivo Especial parameters.yml

Superficialmente, parameters.yml é como qualquer outro arquivo de configuração: ele é importado por config.yml e define vários parâmetros:

1
2
3
4
parameters:
    # ...
    database_user:      root
    database_password:  ~

Não surpreendentemente, esses são referenciados dentro de config.yml e ajudam a configurar o DoctrineBundle e outras partes do Symfony:

  • YAML
    1
    2
    3
    4
    5
    6
    7
    # app/config/config.yml
    doctrine:
        dbal:
            driver:   pdo_mysql
            # ...
            user:     '%database_user%'
            password: '%database_password%'
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:doctrine="http://symfony.com/schema/dic/doctrine"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/doctrine
            http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
    
        <doctrine:config>
            <doctrine:dbal
                driver="pdo_mysql"
    
                user="%database_user%"
                password="%database_password%" />
        </doctrine:config>
    </container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    // app/config/config.php
    $configuration->loadFromExtension('doctrine', array(
        'dbal' => array(
            'driver'   => 'pdo_mysql',
            // ...
    
            'user'     => '%database_user%',
            'password' => '%database_password%',
        ),
    ));
    

Mas o arquivo parameters.yml é especial: ele define os valores que normalmente são alterados em cada servidor. Por exemplo, as credenciais de banco de dados em sua máquina de desenvolvimento local pode ser diferente das de seus colegas de trabalho. É por isso que esse arquivo não está comprometido com o repositório compartilhado e só é armazenado em sua máquina.

Por causa disso, ** parameters.yml não está comprometido com o controle de versão **. De fato, o `` .gitignore`` arquivo que vem com Symfony impede que seja cometido.

No entanto, um arquivo `` parameters.yml.dist`` * é * comprometidos (com valores fictícios). Este ficheiro não é lido por Symfony: é apenas uma referência para que Symfony sabe quais parâmetros precisa ser definido no arquivo `` parameters.yml``. Se você adicionar ou remover chaves para `` Parameters.yml``, adicionar ou removê-los de `` parameters.yml.dist`` também, então ambos arquivos estão sempre em sincronia.

Ambientes e os outros arquivos de configuração

Você tem apenas uma aplicação, porém, caso tenha percebido ou não, ela precisa comportar-se diferentemente em determinados momentos:

  • Enquanto estiver desenvolvendo, você quer que sua aplicação realize log de tudo e exiba ferramentas agradáveis para depuração;
  • Depois de implantar em produção, você quer que a mesma aplicação seja otimizada para velocidade e grave em log apenas erros.

Como você pode fazer uma aplicação comportar-se de duas maneiras diferentes? Com ambientes.

Você provavelmente já está utilizando o ambiente dev, mesmo sem conhecê-lo. Depois de implantar, você vai usar o ambiente prod.

Para saber mais sobre como executar e controlar cada ambiente, consulte Como Dominar e Criar novos Ambientes.

Continue!

Parabéns! Você abordou o básico no Symfony. Em seguida, aprenda sobre cada parte do Symfony individualmente, seguindo os guias. Verifique:

E muitos outros tópicos.