Framework PHP
Ogni framework PHP ha un compito in cui dà il meglio.
Sviluppiamo, recuperiamo e ospitiamo applicazioni con tutti questi framework, e in PHP puro che non ha mai avuto un framework, con un team che scrive PHP da venticinque anni.
PHP
Laravel
Symfony
CodeIgniter
Yii
CakePHP
Quale framework è adatto al tuo progetto
Rispondi a due domande. Ogni percorso finisce dove inizieremmo noi, e dice quando sceglieremmo altro.
Da cosa parti?
Un nuovo progetto
Cosa conta di più?
Un grande sistema su cui lavoreranno più team per anni
Da dove partiremmo
Symfony
Configurazione esplicita, un container di dependency injection, versioni con supporto a lungo termine e Doctrine per i dati. La struttura regge anche quando arriva il quinto sviluppatore.
Valuta anche Laminas se l'azienda usa già codice Zend Framework.
Un prodotto da lanciare presto, con un team piccolo
Da dove partiremmo
Laravel
Autenticazione, code, email, pianificazione e un ORM espressivo già inclusi, con un'unica convenzione per tutto.
Laravel da EGPHPUn'API o un piccolo servizio con un solo compito
Da dove partiremmo
Slim
Routing, middleware e richieste PSR-7 standard, e niente che tu non abbia chiesto. Il livello dati e il container li scegli tu.
Se l'API crescerà fino a diventare un prodotto completo, Laravel o Symfony evitano una riscrittura più avanti.
Una piccola applicazione su un server modesto
Da dove partiremmo
CodeIgniter
Ingombro ridotto, poca configurazione e documentazione chiara. Funziona bene dove le risorse sono scarse.
Molte schermate di dati, generate in fretta dal database
Da dove partiremmo
Yii · CakePHP
Yii genera modelli e schermate CRUD con Gii; CakePHP le crea con bake a partire dalle sue convenzioni. Entrambi trasformano uno schema in schermate funzionanti in poco tempo.
Il minimo overhead del framework a ogni richiesta
Da dove partiremmo
Phalcon
Il framework è un'estensione compilata in C, quindi a ogni richiesta gira pochissimo PHP. Richiede che l'estensione sia installata sul server: sui nostri la installiamo noi.
Molti hosting condivisi non consentono estensioni PHP. Verificalo prima di sceglierlo.
Un'applicazione che esiste già
Su cosa è costruita?
PHP puro senza framework, o una versione di PHP molto vecchia
Da dove partiremmo
Prima il recupero
Prima di tutto la rendiamo sicura e aggiornata, poi decidiamo insieme se vale la pena adottare un framework.
Come si svolge un recuperoBasata su un framework, e funziona
Da dove partiremmo
Mantenere il framework
La aggiorniamo, la mettiamo in sicurezza e la estendiamo nel framework in cui è stata scritta. Riscriverla è l'ultima risorsa, non la prima.
Basata su un framework che vuoi abbandonare
Da dove partiremmo
Migrare per gradi
La vecchia e la nuova applicazione girano affiancate, e le rotte passano da una all'altra una alla volta mentre l'attività continua a lavorare.
Come si svolge una migrazioneA confronto
Cos'è ogni framework, in cosa eccelle e quando ci penseremmo due volte. Nessuno è sbagliato; ognuno è giusto per un lavoro diverso.
| Framework | Cos'è | Livello dati | Punto di forza | Pensaci due volte se |
|---|---|---|---|---|
| Symfony | Framework full-stack e componenti riutilizzabili | Doctrine ORM | Sistemi grandi e longevi, con versioni a supporto a lungo termine | Un piccolo sito deve andare online questa settimana |
| Laravel | Framework full-stack | Eloquent | Lanciare in fretta un prodotto, con code, autenticazione ed email integrate | Vuoi collegare ogni pezzo in modo esplicito |
| CodeIgniter | Framework full-stack leggero | Query builder e modelli semplici | Ingombro ridotto su server modesti | Il progetto ha bisogno di un grande ecosistema di pacchetti |
| Yii | Framework full-stack | Active Record | Schermate ricche di dati generate con Gii, e caching | Il tuo team non lo conosce; la sua community è più piccola |
| CakePHP | Framework full-stack | CakePHP ORM | Convenzione anziché configurazione, e codice generato dallo schema | L'applicazione va contro le sue convenzioni a ogni passo |
| Laminas | Componenti, framework MVC e middleware; il successore di Zend Framework | laminas-db o Doctrine | Sistemi aziendali già costruiti su Zend Framework | Un piccolo progetto nuovo vuole muoversi in fretta |
| Slim | Microframework | Nessuno integrato: a tua scelta | API e piccoli servizi | L'applicazione ha bisogno di sessioni, form e un pannello di amministrazione dal primo giorno |
| Phalcon | Framework full-stack distribuito come estensione C | ORM di Phalcon con PHQL | Overhead molto basso per richiesta | Il tuo hosting non consente di installare estensioni PHP |
Laravel stesso si basa su diversi componenti Symfony, e la maggior parte di questi framework condivide gli stessi standard PSR: spostare codice dall'uno all'altro richiede meno lavoro di quanto sembri.
Vecchio PHP, rimesso in forma
Il codice scritto anni fa fa ancora guadagnare molte aziende. Lo rendiamo sicuro e aggiornato senza spegnerlo.
- $id = $_GET['id'];- $r = mysql_query("SELECT * FROM orders WHERE id = $id");- $order = mysql_fetch_assoc($r);+ $stmt = $pdo->prepare('SELECT * FROM orders WHERE id = ?');+ $stmt->execute([(int) $_GET['id']]);+ $order = $stmt->fetch(PDO::FETCH_ASSOC);
Leggerla e farla girare
Una copia dell'applicazione in funzione su un server aggiornato, e un elenco scritto di ciò che si rompe.
Test su ciò che funziona
Test che registrano cosa fanno oggi le pagine, così una modifica che ne rompe una viene individuata subito.
PHP aggiornato per gradi
Una versione alla volta, con Rector per le modifiche meccaniche e PHPStan per trovare ciò che gli è sfuggito.
Prima la sicurezza
Prepared statement, output con escape, password ricalcolate con un nuovo hash, e sessioni e upload blindati.
Poi, se conviene, un framework
Le nuove funzionalità nascono in un framework accanto al vecchio codice, e le vecchie pagine migrano man mano che vengono toccate.
Passare da un framework all'altro, una rotta alla volta
Non fermiamo l'attività per una riscrittura. La vecchia e la nuova applicazione stanno dietro un unico web server, e ogni rotta passa alla nuova quando la sua sostituta è pronta.
-
/api/ordersNuova applicazione Spostata -
/accountNuova applicazione Spostata -
/checkoutNuova applicazione In test -
/reportsVecchia applicazione In attesa -
/adminVecchia applicazione In attesa
Il cambio è una riga per rotta
# nginx
location /api/orders { proxy_pass http://new; }
location /account { proxy_pass http://new; }
location /checkout { proxy_pass http://new; }
location / { proxy_pass http://old; }
Una rotta che si comporta male torna alla vecchia applicazione con la stessa modifica di una riga, mentre la sistemiamo.
Di cosa ha bisogno un framework dal server
Qualunque framework tu scelga, questo è ciò che il suo hosting deve offrire.
Ambiente di esecuzione
- PHP 8.4 su PHP-FPMOPcache e JIT sono attivi, quindi i tanti file di un framework vengono compilati una volta e riutilizzati.
- ComposerSupporto completo a Composer: un'installazione di produzione con autoloader ottimizzato è un solo comando.
Dati
- Database relazionaliMySQL, MariaDB e PostgreSQL, installati, ottimizzati e salvati.
- RedisCache, sessioni e code in memoria, per le parti di un framework che chiedono sempre la stessa cosa.
Lavoro in background e accesso
- Worker di coda sotto SupervisorI job in background girano come processi supervisionati, riavviati se si fermano e a ogni rilascio.
- Accesso SSHPer deploy, migrazioni e comandi di console del framework.
Prima di spostare qui un'applicazione framework
Sei controlli che intercettano la maggior parte dei lanci falliti. Aprine uno per vedere perché conta.
Allinea la versione di PHP
Leggi il requisito php in composer.json ed esegui composer check-platform-reqs sulla destinazione, così un'estensione mancante emerge prima del lancio e non durante.
Punta la document root alla cartella public
Framework come Laravel e Symfony espongono al web solo la cartella public. Tutto il resto, file d'ambiente compreso, resta fuori.
Sposta configurazione e segreti, non il codice
Le password del database e le chiavi vanno nelle impostazioni d'ambiente o in un file fuori dalla web root, mai nel repository.
Controlla cosa deve essere scrivibile
Cache, log e upload richiedono una cartella in cui l'applicazione possa scrivere, e nient'altro dovrebbe essere scrivibile.
Ricostruisci le cache sul server
Esegui i comandi di cache del framework dopo ogni deploy, perché le cache di rotte e configurazione sono costruite per una macchina e un insieme di percorsi.
Elenca il lavoro in background
Annota i worker di coda e le attività pianificate che l'applicazione si aspetta, così ognuno ottiene un processo supervisionato o una voce cron.

Raccontaci cosa hai in funzione
Il framework, la versione di PHP e cosa ti preoccupa bastano per iniziare. Ogni progetto viene preventivato dopo una breve conversazione.