5.1 KiB
5.1 KiB
name, description
| name | description |
|---|---|
| elixforms-php-project-architecture | Architettura e struttura della parte PHP del progetto elixForms Custom Pages. Descrive la cartella php/, la libreria common condivisa, il pattern delle pagine, le convenzioni di naming, e il deploy su Apache. Attiva questa skill quando lavori sulla parte PHP del progetto, crei nuove pagine PHP, modifichi l'architettura, o devi capire come è organizzato il codice PHP. |
Architettura PHP del Progetto elixForms Custom Pages
Panoramica
La cartella php/ contiene le custom page elixForms realizzate in PHP 8.0+ puro (nessun framework). Ogni pagina è un file PHP autonomo che include la libreria common/ e produce HTML server-side con Bootstrap Italia.
Questa struttura è l'equivalente PHP del monorepo React in react/.
Struttura del Workspace
elixforms-custom-pages/
├── react/ ← Custom pages React (esistente)
└── php/ ← Custom pages PHP
├── AGENTS.md ← Regole dell'agente PHP
├── common/ ← Libreria condivisa PHP
│ ├── ElixFormsComponent.php ← Classe base astratta
│ ├── ElixFormsElement.php ← Wrapper layout label+input
│ └── QueryParamHelper.php ← Utility query string
└── scelta-carriera/ ← Esempio di pagina custom
└── index.php ← Entry point (classe + rendering)
Pattern Architetturale: Singolo File PHP per Pagina
Ogni pagina (es. scelta-carriera/) è un file PHP autonomo che:
- Include la libreria
common/tramiterequire_once - Definisce una classe che estende
ElixFormsComponent - Sovrascrive
createCustomFormFields()per i campi specifici - Istanzia e renderizza la pagina con
echo $page->render() - Genera HTML completo (dalla
<!DOCTYPE html>al</html>) - Non richiede build — servito direttamente da Apache
Namespace e Autoloading
Il progetto usa namespace PSR-4:
namespace ElixForms\Common; // Per le classi in common/
L'autoloading è gestito manualmente con require_once (non Composer):
require_once __DIR__ . '/../common/ElixFormsComponent.php';
// ElixFormsComponent.php include internamente:
// - QueryParamHelper.php
// - ElixFormsElement.php
Requisiti PHP
- Versione minima: PHP 8.0+
- Funzionalità usate:
declare(strict_types=1)— strict typing- Typed properties (
protected array $properties) matchexpression (nel renderField)- Named arguments
- Union types (
int|null,string|null) - Arrow functions (
fn() =>)
CSS Strategy
Le pagine PHP usano <link> tags per caricare i CSS (non bundle JS):
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Titillium+Web:wght@300;400;600;700&display=swap">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-italia@2.18.2/dist/css/bootstrap-italia.min.css">
<link rel="stylesheet" href="https://console-unipr.elixforms.it/rwe2/css/design-bs/util.css">
<link rel="stylesheet" href="https://console-unipr.elixforms.it/rwe2/css/themes/blu-italia.css">
Nota: Stessi CSS del progetto React, ma caricati via
<link>anziché@import url()nel JS bundle.
Integrazione con elixForms
Identica alla versione React:
- Query parameters: Parametri obbligatori passati nell'URL da elixForms
- Form POST: Il form fa submit a
https://procedure.unipr.it/rwe2/ComeBackToElixAndSave - Hidden inputs: I parametri query vengono inseriti come campi hidden nel form
- Encoding:
accept-charset="ISO-8859-1"per compatibilità con il backend
Convenzioni di Naming
- Cartelle pagina: kebab-case (es.
scelta-carriera) - File entry point: sempre
index.php - Classi PHP: PascalCase con suffisso
Page(es.SceltaCarrieraPage) - Namespace:
ElixForms\Commonper la libreria condivisa - Configurazione: opzionale
config.jsonnella cartella della pagina
Differenze con il Progetto React
| Aspetto | React (react/) |
PHP (php/) |
|---|---|---|
| Linguaggio | TypeScript/JSX | PHP 8.0+ |
| Rendering | Client-side | Server-side |
| Build tool | Vite (single bundle JS) | Nessuno (file serviti direttamente) |
| Dipendenze | npm (React, Vite, plugin) | Nessuna (PHP built-in) |
| CSS loading | @import url() + CSS injection plugin |
<link> tags |
| State management | React state (this.setState) |
Stateless ($_GET) |
| Deploy | Upload del bundle .js |
Upload dei file .php |
| Dev server | npm run dev (Vite HMR) |
php -S / Docker |
Deploy su Apache
- Caricare la cartella
php/sul server Apache - Configurazione Apache minima:
mod_phpophp-fpmabilitatoDirectoryIndex index.php(default Apache)
- La pagina è accessibile via URL:
https://server/php/nome-pagina/ - elixForms reindirizza l'utente alla pagina passando i parametri via query string