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.

Läuft auf und gebaut mit
  • 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 EGPHP
Eine 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 ab
Auf 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 ab

Im 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.

PHP-Frameworks im Vergleich
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);
Die mysql_-Funktionen wurden in PHP 7 entfernt. Diese eine Änderung bringt die Seite auf aktuellem PHP zum Laufen und schließt zugleich eine SQL-Injection-Lücke.
  1. Lesen und zum Laufen bringen

    Eine Kopie der Anwendung, die auf einem aktuellen Server läuft, und eine schriftliche Liste dessen, was nicht funktioniert.

  2. 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.

  3. PHP schrittweise aktualisiert

    Eine Version nach der anderen, mit Rector für die mechanischen Änderungen und PHPStan, um zu finden, was dabei übersehen wurde.

  4. Sicherheit zuerst

    Prepared Statements, maskierte Ausgaben, neu gehashte Passwörter sowie abgesicherte Sessions und Uploads.

  5. 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/orders Neue Anwendung Umgezogen
  • /account Neue Anwendung Umgezogen
  • /checkout Neue Anwendung Im Test
  • /reports Alte Anwendung Wartend
  • /admin Alte Anwendung Wartend
Eine Beispielmigration, zur Hälfte abgeschlossen.

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.

MickeyAntwortet in Sekunden