Symfony: “ResourceNotFoundException” mit custom error page

Folgendes Phänomen:

Wenn ich einen internen Fehler in einem Bundle provoziere (bsplw. durch Referenzieren eines nicht existenten Partials in einem Template), wird mir mein Error Template angezeigt.

Wenn ich allerdings eine nicht existente Route öffne (bsplw. http://example.com/does/not/exist), bekomme ich eine ResourceNotFoundException und eine NotFoundHttpException. Die NotFoundHttpException kann man ignorieren, so lange die ResourceNotFoundException noch da ist – das Internet schickt einen hier gerne auf den falschen Pfad und verweist auf Routingprobleme. Die ResourceNotFoundException tritt aber im Twig auf, wenn ein Template nicht gefunden wird. Dann stürzt alles ab, und die NotFoundHttpException kann nicht abschliessend behandelt werden.

Zum Debuggen kann man sich Symfony\Bundle\TwigBundle\Controller\ExceptionController.findTemplate() ansehen. Wenn das Template dort korrekt gefunden wird, sollte man sich dieses Template ansehen, wenn es von einem anderen Template erbt, muss auch dieses auffindbar sein.

Generell würde ich für custom error pages von der Beerbung von Bundle-Templates abraten.

Composer vs. CamelCase

Composer legt Bundles in lowercase benannten Ordnern ab:

Namespaces möchte man aber in CamelCase (hier: “Acme”) haben:

Was man jetzt wissen muss: Trägt man das Bundle in einen PSR-0-Autoloader ein, dann geht das nicht:

, da PSR-0 die Datei unter einem Dateipfad sucht, der dem Namespace entspricht (deploy/vendor/server/Acme/LocaleBundle), “Acme” aber zu “acme” wird. Unter OS X kein Problem, wenn das Dateisystem caseinsensitive ist (scheint der default zu sein? Kann mich da irren), auf einem Server aber schwierig :-) Lösung:

1. Lowercase namespaces

Will man nicht.

2. Unterverzeichnisse nutzen

mit

in der composer.json. Kann man machen, bläht aber die Verzeichnis- (und damit die Projekt-) Struktur unnötig auf.

3. Einen eigenen Autoloader schreiben

:-)

4. PSR-4

Kurz vor Redaktionsschluss noch reingekommen: PSR-4 mit

Vorteil von PSR-4, wenn ich’s richtig verstanden habe: Die Dateien können irgendwo liegen; der Namespace wird unabhängig vom Verzeichnisbaum nur durch die Angaben im PHP-Code vorgegeben. Empfehlenswert ist aus Übersichtsgründen eine Struktur, die sich trotzdem am Namespace orientiert, aber man muss zumindest auf den Case keine Rücksicht mehr nehmen.

PHP auf der Kommandozeile

PHP auf eine andere Version (bsplw. die des MAMP) umbiegen (in der .bash_profile):

Wo liegt die php.ini?

Wo liegt das Verzeichnis für Erweiterungen?

Alle geladenen Module:

Ist ImageMagick verfügbar?

To be completed!

WWI

Bekanntermaßen feiert der 1 Weltkrieg dieses Jahr sein Hundertjähriges. Dazu gibt es vermutlich drölf Projekte, allerdings sind mir bisher erst zwei (gute) über den Weg gelaufen:

  • 1914-1918 – Die Entwicklung der Dinge: Julian Finn veröffentlicht auf den Tag genau 100 Jahre später den jeweiligen Tagebucheintrag seines Urgroßvaters Ernst Pauleit.
  • Einen ähnlichen Ansatz fährt @1914Tweets: Eine Echtzeit- (?) Rekonstruktion der Vorgänge des Jahres 1914, bis hin zum Wetterbericht der Hauptstädte der Kriegsparteien und Zeitungsausschnitte

Gerade in der Kombination bekommt man einen guten Eindruck über, ja, “die Entwicklung der Dinge”. Wie schnell es gehen kann, gerade bei vielen beteiligten Parteien, sieht man bei @1914Tweets:

Während man im Tagebuch einen punktuellen, subjektiven, aber tieferen Eindruck bekommt… so scheint die Stimmung bei Ernst Pauleit “jetzt” eher von Aufbruch und Betriebsamkeit, denn von Angst geprägt zu sein:

In der Stadt wogte und wallte es, als wäre Kirmes. [...] Essen und Trinken gab es in Menge. Zigarren und Zigaretten qualmten von morgens bis spät in die Nacht.

Das Tagebuch ist übrigens zusehends schlechter erreichbar, bei Gefallen also gerne spenden!

UPDATE

Ah, deshalb ist das so langsam: Ein Artikel auf SpOn