Exemplos de injeção de dependência em PHP com componentes do Symfony

Neste artigo, veremos alguns exemplos de uso do componente Symfony DependencyInjection. Você aprenderá o básico da injeção de dependência, que permite um código mais limpo e modular, e verá como usá-lo em suas aplicações PHP com o componente Symfony.

O que é o componente DependencyInjection do Symfony?

O componente DependencyInjection do Symfony fornece uma maneira padrão de instanciar objetos e lidar com o gerenciamento de dependências em seus aplicativos PHP. O coração do componente DependencyInjection é um contêiner, que contém todos os serviços disponíveis no aplicativo.

Durante a fase de bootstrap do seu aplicativo, você deve registrar todos os serviços do seu aplicativo no contêiner. Em um estágio posterior, um contêiner é responsável por criar serviços conforme necessário. Mais importante, um container também é responsável por criar e injetar dependências dos serviços.

O benefício dessa abordagem é que você não precisa codificar o processo de instanciar objetos, pois as dependências serão detectadas e injetadas automaticamente. Isso cria um acoplamento fraco entre as partes do seu aplicativo.

Neste artigo, exploraremos como você pode liberar o poder do componente DependencyInjection. Como de costume, começaremos com as instruções de instalação e configuração e implementaremos alguns exemplos do mundo real para demonstrar os principais conceitos.

Instalação e configuração

Nesta seção, iremos em frente e instalaremos o componente DependencyInjection. Suponho que você já tenha instalado o Composer em seu sistema, pois precisaremos dele para instalar o componente DependencyInjection disponível no Packagist.

Então vá em frente e instale o componente DependencyInjection usando o seguinte comando.

Isso deveria ter criado o compositor.json arquivo, que deve ficar assim:

Também instalaremos alguns outros componentes que serão úteis em nossos exemplos.

Se você deseja carregar serviços de um arquivo YAML em vez de defini-lo no código PHP, é o componente Yaml que vem em socorro, pois ajuda a converter strings YAML em tipos de dados compatíveis com PHP e vice-versa.

Finalmente, instalaremos o componente Config, que fornece várias classes de utilitários para inicializar e lidar com valores de configuração definidos em diferentes tipos de arquivos, como YAML, INI e XML. No nosso caso, vamos usá-lo para carregar serviços do arquivo YAML.

Vamos modificar o compositor.json arquivo para se parecer com o seguinte.

Como adicionamos um novo classmap entrada, vamos em frente e atualizar o autoloader do compositor executando o seguinte comando.

Agora, você pode usar o Services namespace para carregar automaticamente as classes sob o src diretório.

Então essa é a parte da instalação, mas como você deve usá-la? Na verdade, é apenas uma questão de incluir o autoload.php arquivo criado pelo Composer em seu aplicativo, conforme mostrado no trecho a seguir.

Como trabalhar com um contêiner

Nesta seção, veremos um exemplo para demonstrar como você pode injetar serviços em um contêiner. Um contêiner deve atuar como um repositório central que contém todos os serviços em seu aplicativo. Mais tarde, poderíamos usar um contêiner para buscar serviços conforme necessário.

Para começar, vamos definir um serviço bem básico em src/DemoService.php com o seguinte conteúdo.

Deixe uma resposta