Stable
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user