Files
mariano 1dc84aa5eb Stable
2026-05-20 09:20:27 +02:00

2.5 KiB

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.