Symfony Componentes: o que são e qual sua importância para o ecossistema PHP

Recentemente apresentei uma palestra no PHP Community Summit falando sobre o Ecossistema Symfony. A principal motivação para o conteúdo dessa palestra e também deste post é a importância que o Symfony possui para o ecossistema macro do PHP como um todo. Muito desta relevância do Symfony vem dos seus componentes, então vamos falar um pouco sobre eles.

O que são os componentes Symfony

A maioria das pessoas quando ouve falar a palavra Symfony logo pensa em um framework PHP. Na verdade, o Symfony é bem mais que isso, veja a definição oficial do site do Symfony:

O Symfony é um conjunto de componentes, um framework, uma filosofia e uma comunidade.

Antes mesmo de falar que Symfony é um framework existe uma ênfase nos componentes, mas o que são esses componentes. Se formos olhar novamente na definição oficial, mas agora sobre os componentes, teremos:

Componentes são pacotes reutilizáveis e desacoplados com objetivos específicos e que podem ser utilizados em qualquer aplicação PHP.

Exatamente nesse ponto entra a importância do Symfony para o PHP. Os componentes não estão acoplados e funcionam exclusivamente dentro do Symfony Framework, é possível usar os componentes em qualquer aplicação PHP.

Symfony - Fundamentos
Curso de Symfony - Fundamentos
CONHEÇA O CURSO

Quem utiliza os componentes do Symfony?

A maioria dos grandes projetos escritos em PHP utilizam algum dos diversos componentes do Symfony. Veja uma lista abaixo dos principais:

  • Laravel Framework
  • Drupal
  • Magento
  • Joomla
  • Yii Framework
  • API Platform
  • SDK PHP do facebook
  • SDK PHP do Google
  • PHPStan
  • Behat
  • Composer

A lista é muito grande! Na página do Symfony é possível verificar os projetos e quais componentes cada um utiliza. Uma coisa é certa, basicamente qualquer projeto PHP que vamos trabalhar utiliza algum tipo de componente do Symfony.

Porque tanta gente utiliza os componentes do Symfony

Nesse ponto deve estar se perguntando o que esses componentes fazem de especial para serem utilizados em tantos projetos importantes na linguagem PHP e aqui entram dois pontos bem importantes.

O primeiro ponto que leva muitos projetos a utilizarem os componentes do Symfony é a confiabilidade. Os componentes são testados e utilizados em milhares de projetos, além de possuírem uma comunidade por trás que realiza manutenções de segurança e melhorias regularmente.

O segundo ponto é a produtividade, ao invés de reinventar a roda e correr o risco que ela não fique tão redonda quanto o necessário, o que acaba sendo menos produtivo e mais arriscado, porque não utilizar a roda que já está pronta e testada.

O que esses componentes fazem

O Symfony possui componentes para diversos tipos de ações. Existem componentes que ajudam na estruturação de uma aplicação, por exemplo a estruturação de um framework. Existem componentes que ajudam em tarefas comuns a maioria das aplicações, por exemplo enviar email. E também existem componentes que são Polyfill para extensões e versões do PHP, por exemplo, vamos supor que sua aplicação necessite do PHP 7.3, porém não pode instalar essa versão em seu servidor, nesse caso pode instalar um componente que entregará as funções da versão sem realmente possuir.

Alguns exemplos de componentes para estruturação de uma aplicação:

  • HTTP Kernel – Responsável por ajudar na estruturação desde o processo de request até o retorno da Response;
  • HTTP Foundation – Permite acesso a uma implementação orientada a objetos do protocolo HTTP;
  • Routing – Facilita o trabalho de roteamento da aplicação;
  • DependencyInjection – Implementa o container e recursos de injeção de dependência
  • Config – Facilita o acesso às configurações;
  • Dotenv – Permite o acesso às variáveis de ambiente;

Alguns componentes que realizam tarefas comuns a maioria das aplicações:

  • Mailer – Envio de email usando diversos serviços de forma extremamente simples;
  • HTTP Client – Permite realizar requisições HTTP a outras aplicações;
  • Form – Facilita a criação e a recuperação dos dados enviados via formulário;
  • Validation – Permite a validação de dados usando regras predefinidas ou através da criação de novas regras;
  • Security – Facilita o trabalho de autenticação e autorização na aplicação;
  • Cache – Facilita a utilização de cache com diversos meios de armazenamento;
  • DomCrawler – Possui mecanismos que permite navegar em documentos HTML e XML.

Temos também os componentes de polyfill:

  • Polyfill PHP 5.4 até 7.3
  • Polyfill XML
  • Polyfill Intl
  • Polyfill Mbstring
  • Polyfill Ctype

Sempre que for usar componentes de polyfill é necessário consultar a documentação para verificar quais funções o componente realmente implementa, pois nem todas podem estar disponíveis.

Porque não utilizar os componentes do Symfony

Nem tudo são rosas, como a maioria das coisas também existem pontos negativos ao usar componentes prontos.

Podemos citar primeiramente a falta de liberdade. Se sua aplicação necessita de uma nova função que não possui no componente. Caso queira implementar no componente oficial terá que convencer a equipe mantenedora que sua nova funcionalidade é importante para a maioria das pessoas que utilizam o componente, além de ter que seguir todas as regras para contribuir no projeto.

Outro ponto é a dependência do componente. A aplicação pode ficar dependente de um componente de tal forma que se ele for descontinuado ela esteja em risco. Por outro lado, isso pode ser contornado com a arquitetura correta da sua aplicação, se ao invés de depender diretamente do componente, depender de contratos, será possível trocar de componente com o mínimo de esforço.

Conclusão

O Symfony possui mais de 50 componentes para os mais diversos propósitos. Aconselho acessar a lista de componentes e ler o que cada um deles realiza. Desse modo sempre que tiver uma situação onde é necessário implementar uma nova funcionalidade na sua aplicação, poderá considerar um componente Symfony analisando as vantagens e desvantagens discutidas aqui.

Deixe seu comentário

Desenvolvedor, autor e instrutor. Apaixonado por desenvolvimento de software e tudo ligado a área de tecnologia. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel de 1 ano.