PHP-Frameworks
Jedes PHP-Framework hat eine Aufgabe, die es am besten kann.
Wir entwickeln, retten und hosten Anwendungen in allen davon – und in reinem PHP, das nie ein Framework hatte – mit einem Team, das seit fünfundzwanzig Jahren PHP schreibt.
PHP
Laravel
Symfony
CodeIgniter
Yii
CakePHP
Welches Framework zu Ihrem Projekt passt
Beantworten Sie zwei Fragen. Jeder Pfad endet dort, wo wir anfangen würden – und sagt, wann wir etwas anderes wählen würden.
Womit starten Sie?
Ein neues Projekt
Was ist am wichtigsten?
Ein großes System, an dem mehrere Teams jahrelang arbeiten
Hier würden wir anfangen
Symfony
Explizite Konfiguration, ein Dependency-Injection-Container, Releases mit Langzeitsupport und Doctrine für die Daten. Die Struktur hält auch dann noch, wenn der fünfte Entwickler dazukommt.
Ziehen Sie auch Laminas in Betracht, wenn im Unternehmen bereits Code auf Zend Framework läuft.
Ein Produkt, das bald fertig sein muss, mit einem kleinen Team
Hier würden wir anfangen
Laravel
Authentifizierung, Queues, Mail, Scheduling und ein ausdrucksstarkes ORM direkt mitgeliefert – mit einer einheitlichen Konvention für alles.
Laravel bei EGPHPEine API oder ein kleiner Service mit einer einzigen Aufgabe
Hier würden wir anfangen
Slim
Routing, Middleware und standardisierte PSR-7-Requests – und nichts, worum Sie nicht gebeten haben. Datenbankschicht und Container wählen Sie selbst.
Wenn die API zu einem vollständigen Produkt wachsen soll, ersparen Laravel oder Symfony später einen Neubau.
Eine kleine Anwendung auf einem bescheidenen Server
Hier würden wir anfangen
CodeIgniter
Schlank, wenig Konfiguration und eine klare Dokumentation. Läuft gut, wo die Ressourcen knapp sind.
Viele Datenmasken, schnell aus der Datenbank erzeugt
Hier würden wir anfangen
Yii · CakePHP
Yii erzeugt Models und CRUD-Masken mit Gii; CakePHP „backt“ sie aus seinen Konventionen. Beide machen aus einem Schema schnell funktionierende Masken.
Möglichst wenig Framework-Overhead bei jeder Anfrage
Hier würden wir anfangen
Phalcon
Das Framework ist eine kompilierte C-Erweiterung, daher läuft pro Anfrage sehr wenig PHP. Die Erweiterung muss auf dem Server installiert sein – auf unseren installieren wir sie.
Viele Shared-Hosting-Anbieter erlauben keine PHP-Erweiterungen. Prüfen Sie das, bevor Sie sich dafür entscheiden.
Eine bereits bestehende Anwendung
Worauf basiert sie?
Reines PHP ohne Framework oder eine sehr alte PHP-Version
Hier würden wir anfangen
Zuerst retten
Wir machen es vor allem anderen sicher und aktuell und entscheiden dann gemeinsam, ob sich ein Framework lohnt.
So läuft eine Rettung abAuf einem Framework gebaut, und es funktioniert
Hier würden wir anfangen
Beim Framework bleiben
Wir aktualisieren, sichern und erweitern es in dem Framework, in dem es geschrieben wurde. Ein Neuschreiben ist das letzte Mittel, nicht das erste.
Auf einem Framework gebaut, das Sie verlassen möchten
Hier würden wir anfangen
Schrittweise migrieren
Die alte und die neue Anwendung laufen parallel, und die Routen wechseln eine nach der anderen, während das Geschäft weiterläuft.
So läuft eine Migration abIm direkten Vergleich
Was jedes Framework ist, worin es am stärksten ist und wann wir es uns zweimal überlegen würden. Keines davon ist falsch; jedes passt zu einer anderen Aufgabe.
| Framework | Was es ist | Datenschicht | Am stärksten bei | Zweimal überlegen, wenn |
|---|---|---|---|---|
| Symfony | Full-Stack-Framework und wiederverwendbare Komponenten | Doctrine ORM | Große, langlebige Systeme, mit Langzeitsupport-Releases | Eine kleine Website diese Woche online gehen muss |
| Laravel | Full-Stack-Framework | Eloquent | Ein Produkt schnell ausliefern, mit eingebauten Queues, Authentifizierung und Mail | Sie jedes Teil explizit verdrahten möchten |
| CodeIgniter | Schlankes Full-Stack-Framework | Query Builder und einfache Models | Geringer Ressourcenbedarf auf bescheidenen Servern | Das Projekt ein großes Ökosystem an Paketen braucht |
| Yii | Full-Stack-Framework | Active Record | Datenlastige Masken, mit Gii generiert, und Caching | Ihr Team es noch nicht kennt; die Community ist kleiner |
| CakePHP | Full-Stack-Framework | CakePHP ORM | Konvention vor Konfiguration und aus dem Schema gebackener Code | Die Anwendung bei jedem Schritt gegen die Konventionen ankämpft |
| Laminas | Komponenten, MVC- und Middleware-Frameworks; der Nachfolger von Zend Framework | laminas-db oder Doctrine | Geschäftssysteme, die bereits auf Zend Framework aufbauen | Ein kleines neues Projekt schnell vorankommen will |
| Slim | Micro-Framework | Nichts eingebaut – Sie haben die Wahl | APIs und kleine Services | Die Anwendung vom ersten Tag an Sessions, Formulare und einen Admin-Bereich braucht |
| Phalcon | Full-Stack-Framework als C-Erweiterung | Phalcon ORM mit PHQL | Sehr geringer Overhead pro Anfrage | Ihr Hoster keine PHP-Erweiterungen installieren kann |
Laravel selbst baut auf mehreren Symfony-Komponenten auf, und die meisten dieser Frameworks teilen dieselben PSR-Standards – Code zwischen ihnen zu verschieben ist weniger Arbeit, als es aussieht.
Altes PHP, wieder in Form gebracht
Vor Jahren geschriebener Code verdient für viele Unternehmen noch immer Geld. Wir machen ihn sicher und aktuell, ohne ihn abzuschalten.
- $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);
Lesen und zum Laufen bringen
Eine Kopie der Anwendung, die auf einem aktuellen Server läuft, und eine schriftliche Liste dessen, was nicht funktioniert.
Tests für das, was funktioniert
Tests, die festhalten, was die Seiten heute tun – so fällt eine Änderung, die eine davon kaputt macht, sofort auf.
PHP schrittweise aktualisiert
Eine Version nach der anderen, mit Rector für die mechanischen Änderungen und PHPStan, um zu finden, was dabei übersehen wurde.
Sicherheit zuerst
Prepared Statements, maskierte Ausgaben, neu gehashte Passwörter sowie abgesicherte Sessions und Uploads.
Dann, wenn es sich lohnt, ein Framework
Neue Funktionen entstehen in einem Framework neben dem alten Code, und alte Seiten wandern hinüber, sobald sie angefasst werden.
Wechsel zwischen Frameworks, eine Route nach der anderen
Wir halten das Geschäft nicht für eine Neuentwicklung an. Die alte und die neue Anwendung stehen hinter einem gemeinsamen Webserver, und jede Route wechselt, sobald ihr Ersatz bereit ist.
-
/api/ordersNeue Anwendung Umgezogen -
/accountNeue Anwendung Umgezogen -
/checkoutNeue Anwendung Im Test -
/reportsAlte Anwendung Wartend -
/adminAlte Anwendung Wartend
Die Umschaltung ist eine Zeile pro Route
# 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; }
Eine Route, die Probleme macht, geht mit derselben einzeiligen Änderung zurück an die alte Anwendung, während wir sie reparieren.
Was ein Framework vom Server braucht
Welches Framework Sie auch wählen: Das muss sein Hosting bieten.
Laufzeit
- PHP 8.4 über PHP-FPMOPcache und JIT sind aktiv, sodass die vielen Dateien eines Frameworks einmal kompiliert und wiederverwendet werden.
- ComposerVolle Composer-Unterstützung: Eine Produktivinstallation mit optimiertem Autoloader ist ein Befehl.
Daten
- Relationale DatenbankenMySQL, MariaDB und PostgreSQL, installiert, abgestimmt und gesichert.
- RedisCache, Sitzungen und Warteschlangen im Speicher, für die Teile eines Frameworks, die immer wieder dasselbe abfragen.
Hintergrundarbeit und Zugang
- Queue-Worker unter SupervisorHintergrundjobs laufen als überwachte Prozesse, werden bei einem Stopp und bei jedem Release neu gestartet.
- SSH-ZugangFür Deployments, Migrationen und die Konsolenbefehle des Frameworks.
Bevor Sie eine Framework-Anwendung hierher umziehen
Sechs Prüfungen, die die meisten missglückten Starts abfangen. Öffnen Sie eine, um zu sehen, warum sie zählt.
PHP-Version abgleichen
Lesen Sie die php-Anforderung in composer.json und führen Sie auf dem Ziel composer check-platform-reqs aus, damit eine fehlende Erweiterung vor dem Start auffällt und nicht währenddessen.
Document-Root auf den public-Ordner legen
Frameworks wie Laravel und Symfony lassen nur ihren public-Ordner zum Web hin offen. Alles andere, auch die Umgebungsdatei, bleibt außerhalb.
Konfiguration und Geheimnisse umziehen, nicht den Code
Datenbankpasswörter und Schlüssel gehören in Umgebungseinstellungen oder eine Datei außerhalb des Web-Roots, nie ins Repository.
Prüfen, was beschreibbar sein muss
Cache, Logs und Uploads brauchen einen Ordner, in den die Anwendung schreiben darf, und sonst sollte nichts beschreibbar sein.
Caches auf dem Server neu aufbauen
Führen Sie nach jedem Deployment die Cache-Befehle des Frameworks aus, denn Routen- und Konfigurations-Caches gelten für eine Maschine und einen Satz Pfade.
Hintergrundarbeit auflisten
Notieren Sie die Queue-Worker und geplanten Aufgaben, die die Anwendung erwartet, damit jede einen überwachten Prozess oder einen Cron-Eintrag bekommt.

Erzählen Sie uns, was Sie betreiben
Das Framework, die PHP-Version und das, was Ihnen daran Sorgen macht, genügen für den Anfang. Jedes Projekt erhält nach einem kurzen Gespräch ein Angebot.