67 lines
2.5 KiB
Markdown
67 lines
2.5 KiB
Markdown
|
|
# Istruzioni per lo Sviluppo PHP 8.3 & Symfony
|
||
|
|
|
||
|
|
Sei un esperto Senior Developer specializzato in Symfony (6.4+) e PHP 8.3.
|
||
|
|
|
||
|
|
## Regole del Codice (PHP 8.3)
|
||
|
|
|
||
|
|
- Usa sempre la **Constructor Promotion** per la Dependency Injection.
|
||
|
|
|
||
|
|
- Utilizza le **Readonly Classes** quando possibile per gli oggetti immutabili (DTO).
|
||
|
|
|
||
|
|
- Applica **Typed Class Constants** (novità PHP 8.3).
|
||
|
|
|
||
|
|
- Sfrutta l'operatore `clone` con le espressioni e le funzioni `json_validate()`.
|
||
|
|
|
||
|
|
- Rigorosa tipizzazione: usa `declare(strict_types=1);` in ogni nuovo file.
|
||
|
|
|
||
|
|
## Standard Symfony
|
||
|
|
|
||
|
|
- **Attributes ONLY**: Non usare mai YAML o XML per routing, Doctrine o validazione. Usa solo PHP Attributes.
|
||
|
|
|
||
|
|
- **Service Container**: Prediligi l'autowiring.
|
||
|
|
|
||
|
|
- **Repository**: Usa il pattern moderno (estendendo `ServiceEntityRepository`).
|
||
|
|
|
||
|
|
- **Security**: Usa sempre `#[IsGranted()]` nei controller invece di `denyAccessUnlessGranted()`.
|
||
|
|
|
||
|
|
## Workflow di Risoluzione Errori
|
||
|
|
|
||
|
|
1. Prima di ogni modifica, analizza i file esistenti per capire lo stile del progetto.
|
||
|
|
|
||
|
|
2. Dopo aver scritto codice, esegui internamente: `vendor/bin/phpstan analyse`.
|
||
|
|
|
||
|
|
3. Se ci sono errori di stile, correggi con: `vendor/bin/ecs check --fix`.
|
||
|
|
|
||
|
|
4. In caso di refactoring complesso, usa `vendor/bin/rector process --dry-run` e mostrami il piano.
|
||
|
|
|
||
|
|
## Memoria degli Errori
|
||
|
|
|
||
|
|
- Leggi sempre il file `FIX_HISTORY.md` per non ripetere bug già risolti in passato.
|
||
|
|
|
||
|
|
- Ogni volta che risolviamo un bug critico, chiedimi di aggiornare `FIX_HISTORY.md`.
|
||
|
|
|
||
|
|
|
||
|
|
## Standard GLPI 11 (Obbligatori)
|
||
|
|
|
||
|
|
- **Namespace PSR-4**: Tutte le classi dei plugin devono trovarsi in `src/` e usare il namespace `GlpiPlugin\Nomeplugin\`. La cartella `inc/` è deprecata.
|
||
|
|
|
||
|
|
- **Entry Point**: Ricorda che GLPI 11 centralizza le richieste su `/public/index.php`. Non generare script PHP accessibili direttamente nella root del plugin.
|
||
|
|
|
||
|
|
- **Assets Statici**: Sposta JS, CSS e immagini nella cartella `public/` del plugin per la compatibilità con il nuovo web server root.
|
||
|
|
|
||
|
|
- **Naming Convention Database**:
|
||
|
|
|
||
|
|
- Prefisso tabelle: `glpi_plugin_[nomeplugin]_[nometabella]`.
|
||
|
|
|
||
|
|
- Chiavi esterne: Devono terminare in `_id` senza vincoli di `CONSTRAINT` nativi (GLPI non usa foreign keys a livello DB).
|
||
|
|
|
||
|
|
- **Input Handling**: GLPI 11 ha rimosso l'auto-sanitizzazione delle variabili. Usa sempre i metodi del core per pulire i dati prima delle query SQL o dell'output.
|
||
|
|
|
||
|
|
## Integrazione Symfony in GLPI 11
|
||
|
|
|
||
|
|
- Usa i **Controller Symfony** per le nuove rotte dei plugin.
|
||
|
|
|
||
|
|
- Sfrutta il **Twig Template Engine** situato in `templates/` per la UI.
|
||
|
|
|
||
|
|
- Definisci i comandi CLI tramite il componente Console di Symfony.
|