Articles with the tag Web-Applikationen

"PHP-Projekte in Mini Apps aufteilen: Micro Services mit Kompromissen"


Ich möchte in diesem Artikel gerne einen Ansatz vorstellen, um komplexere Projekte etwas zu modularisieren. Mit komplex meine ich vor allem solche, die verschiedene Komponenten von Drittanbietern verwenden, auf die man vielleicht selbst nicht direkten Einfluss hat. Probleme bei solchen Projekten können sein:

  • Sie "passen" nicht zu dem im Hauptprojekt verwendeten Framework, nutzen z. B. ein eigenes Mini-Framework, das die Code-Menge nochmal erheblich erhöht.
  • Es entstehen Abhängigkeitskonflikte, oder die Komponente hindert uns daran, für unser Code die neuste Version einer Library zu verwenden.

Als praktisches Beispiel:

  • Das eigentliche Projekt ist eine komplexe Website auf Basis des Zend Frameworks
  • Für die Dateiverwaltung auf dem Server wollten wir einen bestehenden Filemanager verwenden. Dieser bietet ein composer package, und einen Front controller (index.php Datei), die man an einem beliebigen Ort, z.B. unter /fileadmin installieren sollte.
  • Dummerweise verwendet der Filemanager das Symfony Framework
  • Für unsere App haben wir zusätzlich zum ZF noch die symfony/filesystem Komponente eingebunden.

Soweit funktioniert alles. Nun möchten wir aber das neuste Feature der Filesystem Komponente nutzen, wir erhöhen also in unserer composer.json Datei die Version von symfony/filesystem. Beim anschließenden composer update dann die Überraschung: Geht nicht, unser Filemanager benötigt eine andere Version. Abhängigkeitskonflikt.


Routing with PHP's built in server


PHP has a built in development server, which is very handy during development. However, I had some difficulties to get it working correctly. After a lot of debugging, and reading bug reports and the php documentation I learned some things:

  • It can serve static files
  • It has some uncommon rules how to set some $_SERVER variables when the url path contains a dot. (The reason for this is probably that a dot in the url path indicates that the resource is a file rather than a dynamically generated document). And this is not documented very clearly!

If you're setup is not working but you don't have time to read the article, try my gist for a quick example.