PHP Workflow com VSCODE

Já tem algum tempo que venho utilizando o ATOM (e os plugins php-integrator-*) para desenvolvimento PHP, porém, sempre achei que é um editor pesado pro que se propõe (se comparado ao sublime text por exemplo), mas como no sublime, que considero ótimo, não existe plugins tão bons quanto os do ATOM resolvi buscar outras alternativas e foi então que me surge o VsCode (https://code.visualstudio.com) e pensei: por que não dar uma chance pra ele?.

Sempre parto das premissas que tenho que ter:

  • Autocomplete para namespaces, métodos e variáveis.
  • Linter e code fixer
  • Integração com GIT para no mínimo ter o diff do arquivo (Nisso o VSCode por padrão é matador)
  • E por último um debugger (e essa parte vou até detalhar como configurar o xDebug inclusive com Docker que é o que mais demorei configurar)

Para conseguir tudo isso segue a baixo a lista de plugins que estou utilizando:

PHPCS

Desses plugins os únicos que exigem alguma configuração são os: PHP Debug e Phpcs. E primeiro vamos configurar o phpcs que é o mais simples dos dois (Estou focando nestes dois pelo fato de que os de Intellisense é apenas instalar que ele indexará o projeto e já funcionará):

1 — Indo nas suas preferencias e depois em configurações (no caso do Mac só utilizar cmd + ,).

2 — Do lado direto (essas são suas configurações personalizadas) é só adicionar: “phpcs.standard”: “PSR2” para utilizar o padrão PSR2 que acredito ser o mais recomendado para projetos em gerais. Como estamos utilizando o PHP_CodeSiffer ele já vem com os seguintes padrões para você utilizar: MySource, PEAR, PSR1, PSR2, Squiz e Zend.

3 — Para testar o resultado disso é só codificando e caso queira que ele faça o serviço de formatar o código pra você só clicar com o botão direito dentro do arquivo que quer formatar e clicar em "Formatar Documento" (lembrando que ele terá warning no editor em locais que não estão de acordo com a formatação do standard escolhido)

PHP Debug

Essa é a parte que eu gostaria mesmo de falar, pois, de tudo que testei o único editor que me atendeu tão bem quanto o PHPStorm (que não renovei a licença :/ ) foi o VsCode. E deu um pouquinho mais de trabalho pra mim do que deveria pelo fato de eu estar utilizando Docker e precisando debugar remotamente do meu host no container em que a aplicação está rodando.

Primeiramente vamos a como fazer isso sem utilizar o Docker que funcionou de primeira pra mim (sim, eu testei sem o docker quando não está conseguindo utilizar com ele). É muito muito simples:

1 — Primeiro eu vou partir do pressuposto que você já tem o Xdebug instalado e ai neste caso você precisa apenas adicionar duas linhas no seu php.ini (ou caso seu ini do Xdebug esteja separado coloque no ini dele pra ficar melhor organizado) e de preferência depois verifique se funcionou a configuração com um phpinfo():

xdebug.remote_enable = 1
xdebug.remote_autostart = 1

2 — Depois é só ir na aba de Debug do VsCode, clicar na seleção do lado do botão de play e depois em 'Add configuration..', depois selecione PHP e abrir um arquivo chamado 'launch.json' com as seguintes configurações:

2 — Apenas com isso seu debug estará funcionando normalmente é só apertar o play com o php o Xdebug selecionado, colocar um breakpoint em algum arquivo que será executado e executar a página no browser e tudo estará funcionando já.

Explicando um pouco sobre a configuração, essa porta 9000 é a porta padrão do xDebug, caso você tenha essa porta ocupada poderá alterar a configuração no .ini do Xdebug e adicionar alterar o remote_port e adicionar essa nova porta na configuração acima.

PHP Debug + Docker

Para que tudo funcione perfeitamente é necessário adicionar algumas configurações no Xdebug do seu container docker que são as seguintes:

Para facilitar isso existe uma imagem já pronta que pode facilitar e muito sua vida: https://hub.docker.com/r/petronetto/php-debug/

Depois de fazer isso verificar no phpinfo() se o PHP realmente carregou as configurações, depois é preciso fazer uma configuração no seu debug para que ele entenda que a sua pasta local é a mesma que ta rodando no container. No meu caso a configuração ficou desta forma:

A diferença ai é a adição de localSourceRoot e serverSourceRoot. Basicamente você informa pro Debug que sua pasta local (que pode ser abreviada com esse ${workspaceRoot} que o mesmo que ./ ) é a mesma pasta que a /var/www/app/public no meu container para que a partir dai ele possa entender as informações do Xdebug para debugar sua aplicação.

A partir dai é só ser feliz e ter um ambiente de desenvolvimento legal para trabalhar com PHP em um editor muito bom e até então muito leve (não tão quanto o sublime).

Qualquer dúvida ou problema em executar o que escrevi acima pode chamar em qualquer um dos canais abaixo:

Telegram: @bdouglas

Twitter: @bdouglasans

Facebook: breno.douglas

Qualquer critica e sugestão é muito bem vinda.