Symfony 4.4: Melhorias na Injeção de Dependência (Parte 1)

Dump do Container em Um Único Arquivo

Andréia Bohner
2 min readNov 28, 2019

Originalmente, o container do Symfony foi compilado e feito dump em um grande arquivo PHP. Em seguida, foi alterado para permitir o dump de cada serviço em seu próprio pequeno arquivo PHP. No Symfony 4.4, foi adicionada uma nova opção de configuração para permitir o dump do container novamente em um grande arquivo único.

Isso é ativado por padrão em todas as novas aplicações Symfony, mas você também pode ativá-lo em suas aplicações existentes através do arquivo src/Kernel.php:

Ignorar Erros ao Importar Arquivos

Ao importar arquivos de configuração, você pode usar a opção ignore_errors: true para ignorar silenciosamente os arquivos ausentes. No entanto, essa opção também ignora arquivos que existem, mas contêm erros de sintaxe. No Symfony 4.4, foi adicionado um novo valor para essa opção, que possibilita ignorar apenas os arquivos ausentes e não os arquivos com erros de sintaxe:

Permitir o Uso de Valores Base64url em Variáveis de Ambiente

Usar o padrão Base64 na URL requer a codificação dos caracteres +, / e =. É por isso que a RFC 4648 define uma variante Base64 chamada Base64url, que é segura para URLs e nomes de arquivos. A Base64url substitui + por - e / por _ (e torna o = final opcional).

No Symfony 4.4, o processador de variáveis de ambientebase64 foi aprimorado para também permitir o parse de valores base64url. Você não precisa alterar nada no seu código, porque o Symfony pode detectar valores base64url automaticamente e fazer o parse para você.

Permitir Bind de Serviços por Tag

O bind de argumentos por nome ou tipo permite injetar serviços e parâmetros com base no nome e/ou tipo dos argumentos do construtor do serviço. No Symfony 4.4, você também pode injetar serviços iteráveis (iterable) e marcados (tagged).

No exemplo a seguir, a configuração _instanceof adiciona uma tag a qualquer serviço cujas classes implementem a interface fornecida e a configuração _defaults.bind injeta todos esses serviços em qualquer argumento iterable $rules do construtor:

Tradução de: New in Symfony 4.4: Dependency Injection Improvements (Part 1)

--

--