Files
elixforms-web-services/docs/debug-api-vscode-docker.md
2026-07-23 23:07:21 +02:00

108 lines
3.1 KiB
Markdown

# Debug delle API PHP in VS Code con Docker
Queste istruzioni permettono di fare debug delle API PHP servite con Docker direttamente da Visual Studio Code.
## Prerequisiti
- Docker Desktop installato e in esecuzione
- Visual Studio Code
- Estensione PHP per VS Code
## 1. Configurazione del progetto
Il progetto contiene già i file necessari per il debug:
- `.docker/php/Dockerfile` - container PHP con Xdebug
- `docker-compose.yml` - configurazione Docker
- `.vscode/launch.json` - configurazione di avvio VS Code
Il servizio usa:
- **porta `8000`** per HTTP
- **porta host `9013`** per la connessione in uscita di Xdebug verso VS Code
## 2. Avvia il container
Dalla root del progetto esegui:
```bash
docker compose up --build
```
Il server PHP sarà disponibile su:
```text
http://localhost:8000
```
## 3. Avvia il debug in VS Code
1. Apri la sezione **Run and Debug** in VS Code (Ctrl+Shift+D)
2. Seleziona la configurazione: **API - Listen for Xdebug**
3. Premi **F5** per avviare il debugger
## 4. Imposta un breakpoint e testa
1. Aggiungi un breakpoint in un controller, ad esempio:
```text
src/Api/Controllers/V1/UsersController.php
```
2. Richiama un endpoint tramite browser:
```text
http://localhost:8000/api/users
```
3. Esegui la stessa richiesta con curl:
```bash
curl http://localhost:8000/api/users
```
`xdebug.start_with_request=yes` avvia il tentativo di connessione per ogni
richiesta, quindi non serve aggiungere `XDEBUG_TRIGGER`.
Il debugger dovrebbe fermarsi sul breakpoint e permetterti di ispezionare le variabili.
## 5. Risoluzione dei problemi
### VS Code non si ferma sul breakpoint
- Verifica che Xdebug sia abilitato nel container
- Controlla che `xdebug.client_host` in `.docker/php/xdebug.ini` punti a
`host.docker.internal`
- Verifica che la porta 9013 sia disponibile e non bloccata dal firewall
### Il container non si avvia
- Assicurati che Docker Desktop sia in esecuzione
- Verifica che la porta HTTP 8000 non sia già in uso
- Controlla i log di Docker per errori specifici
### "Failed to fetch" dalle richieste del frontend
- Verifica che il frontend abbia il CORS correttamente configurato
- Controlla che `allowed_origins` in `config/config.php` includa l'origine del frontend
- Testa con l'endpoint di diagnostica `/cors-check`
### Diagnostica avanzata dei breakpoint
Il log Xdebug è scritto nel container in `/tmp/xdebug.log`. Per analizzare anche
la registrazione e la risoluzione dei breakpoint, imposta temporaneamente
`xdebug.log_level=10` in `.docker/php/xdebug.ini`, riavvia il container e usa:
```bash
docker exec elixforms-ws tail -f /tmp/xdebug.log
```
Al termine ripristina `xdebug.log_level=7`, perché il livello 10 produce molti
dettagli per ogni riga eseguita.
## Note
- La procedura di debug influisce solo sulla sessione VS Code, il server continua a funzionare normalmente
- È possibile debug con i breakpoint condizionali per limitare i fermi
- Usa la console di debug di VS Code per eseguire comandi PHP durante il debug