Configuración de PHP-CS-Fixer en VSCode con Entornos Dockerizados sin PHP Instalado

En este tutorial, exploraremos cómo configurar y utilizar PHP-CS-Fixer en Visual Studio Code cuando tu entorno está completamente dockerizado y no tienes PHP instalado en tu sistema local. Aunque esta solución se centra en un entorno basado en Linux (y debería funcionar en macOS debido a la existencia de la carpeta /tmp), adaptaremos el proceso para proyectos Symfony utilizando un archivo docker-compose.yml. Sin embargo, los pasos descritos también pueden aplicarse a otros proyectos que utilicen PHP.

El objetivo es permitir que VSCode interactúe con PHP-CS-Fixer dentro del contenedor Docker, garantizando que las reglas de formato sean aplicadas automáticamente al guardar archivos. Este enfoque asegura una experiencia fluida y profesional, manteniendo la consistencia en el código.

Si trabajas en un proyecto donde todo está encapsulado en contenedores Docker y no deseas instalar PHP ni herramientas adicionales en tu sistema local, configurar herramientas como PHP-CS-Fixer puede parecer complicado. Sin embargo, con algunas modificaciones en tu archivo docker-compose.yml, la creación de un script personalizado y la instalación de extensiones adecuadas en VSCode, puedes lograrlo sin problemas.

Este tutorial asume que ya tienes un proyecto Symfony, Laravel, Php nativo u otro configurado con Docker y que utilizas Visual Studio Code como editor principal. Vamos a centrarnos en cómo integrar PHP-CS-Fixer en este entorno.

Paso 1: Modificar el Archivo docker-compose.yml

Primero, necesitamos asegurarnos de que nuestro contenedor PHP tenga acceso al volumen compartido correctamente. En tu archivo docker-compose.yml, agrega o verifica que existe la siguiente línea en la sección del servicio PHP:

volumes:
    ....
    ....
    - /tmp:/tmp

La línea (/tmp:/tmp) permite compartir la carpeta temporal entre el host y el contenedor, lo cual es crucial para la comunicación entre VSCode y el contenedor.

Nota: “Si tu estructura de carpetas es diferente, ajusta la ruta según corresponda.”

Paso 2: Crear el Script Ejecutable php-cs-fixer.sh

Crea un archivo llamado php-cs-fixer.sh en la raíz de tu proyecto con el siguiente contenido:

#!/bin/bash
new_args=()
for arg in "$@"; do
  case $arg in
    --config=*)
      # Extraer el nombre del archivo y sustituir la ruta por la ruta interna del contenedor.
      config_file=$(basename "${arg#--config=}")
      new_args+=("--config=/var/www/${config_file}")
      ;;
    *)
      new_args+=("$arg")
      ;;
  esac
done
docker exec symfony6_php php /var/www/vendor/bin/php-cs-fixer "${new_args[@]}"

Explicación:

  • Este script actúa como un puente entre VSCode y el contenedor Docker.
  • Reemplaza las rutas locales por rutas internas del contenedor.
  • Ejecuta PHP-CS-Fixer dentro del contenedor symfony6_php.

Importante: Cambia symfony6_php por el nombre de tu contenedor PHP si es diferente.

Hacer el archivo ejecutable:

chmod +x php-cs-fixer.sh

Paso 3: Instalar PHP-CS-Fixer en el Proyecto

Dentro del contenedor, instala PHP-CS-Fixer como dependencia de desarrollo:

Importante: “Recuerda reemplazar symfony6_php por el nombre de tu contenedor.”

docker exec -it symfony6_php composer require --dev friendsofphp/php-cs-fixer

Esto añadirá PHP-CS-Fixer al proyecto y lo hará disponible en /var/www/vendor/bin/php-cs-fixer.

Paso 4: Configurar VSCode

Instala la extensión PHP CS Fixer de Junstyle en VSCode. Luego, configura los siguientes parámetros en el archivo settings.json de VSCode o si quieres que solo se aplique estas reglas por proyecto, puedes crear en la raíz de tu proyecto una carpeta llamada .vscode y dentro un archivo llamado settings.josn

{
    "php-cs-fixer.executablePath": "${workspaceFolder}/php-cs-fixer.sh",
    "php-cs-fixer.config": "/var/www/.php-cs-fixer.dist.php",
    "[ php ]": {
        "editor.defaultFormatter": "junstyle.php-cs-fixer",
        "editor.formatOnSave": true
    }
}

Personalización para Symfony:

Crea una carpeta .vscode en la raíz de tu proyecto y añade un archivo settings.json con el siguiente contenido:

{
    "php-cs-fixer.rules": "@Symfony"
}

Nota: Si en el paso 4 creaste la carpeta .vscode con el archivo settings.json, agrega esta linea a dicho archivo

Paso 5: Verificar la Configuración

Reinicia VSCode para aplicar los cambios. Abre un archivo PHP en tu proyecto, realiza alguna modificación y guárdalo. PHP-CS-Fixer debería formatear automáticamente el archivo según las reglas definidas.

Conclusión:

Con estos pasos, has configurado exitosamente PHP-CS-Fixer en VSCode para trabajar en un entorno dockerizado sin necesidad de tener PHP instalado en tu sistema local. Esta solución es especialmente útil para proyectos Symfony, pero puede adaptarse fácilmente a otros proyectos PHP. Recuerda ajustar los nombres de los servicios Docker y las rutas según tu configuración específica.

Si encuentras algún problema, revisa los logs del contenedor o verifica que todas las rutas coincidan correctamente entre tu sistema y el contenedor. ¡Feliz codificación!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *