Erstellen Sie eine möglichst minimale Symfony-4-Anwendung, die auf HTTP-Anfragen ähnlich wie der Webserver aus Aufgabe 4 antwortet, ohne dass es entsprechende HTML-Dateien tatsächlich als statische Ressourcen auf dem Webserver gibt.
In der folgenden Spezifikation sind jeweils die erwarteten HTTP-Header und -Body durch eine Leerzeile getrennt. Die angegebenen HTTP-Header-Zeilen müssen genauso auch in den Antworten Ihrer Anwendung stehen (der Header darf zusätzliche Zeilen beinhalten). Die HTTP-Bodys Ihrer Antworten dürfen leicht abweichende Inhalte haben.
GET /
, GET /index.htm
und GET /hallo.htm
Bei allen drei Anfragen identisch:
HTTP/1.1 200 OK
Hallo, Welt!
GET /index.html
HTTP/1.1 302 Found
Location: index.htm
GET /super-secret.htm
HTTP/1.1 403 Forbidden
Kein Zugriff!
GET /secret.htm
Bei Anfrage ohne Zugangsdaten:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Secured Area"
Bei Anfrage mit Nutzer htw
und Password webdev
:
HTTP/1.1 200 OK
Geheimer Inhalt.
GET /zeit.htm
Die Ausgabe soll bei jedem Aufruf der jeweils aktuellen Uhrzeit entsprechen.
HTTP/1.1 200 OK
Aktuelle Zeit: 04.01.2018 15:08:06
GET /some-random-file.htm
HTTP/1.1 404 Not found
Datei nicht gefunden.
Ebenso bei jeder anderen Anfrage, die hier nicht spezifiziert wurde.
Minimale Abhängigkeiten
$ composer create-project symfony/skeleton bonus-http-symfony
$ cd bonus-http-symfony
$ composer require sensio/framework-extra-bundle
$ composer require security
Sie dürfen in dieser Aufgabe keine weiteren Abhängigkeiten verwenden!
Minimaler Code
kernel.exception
-Events reagieren, die u.a.
über das Fehlen einer Route für eine angefragte URL informieren.
Sie dürfen dafür eine weitere Klasse anlegen, deren einzige Methode
nicht mehr als fünf Statements beinhaltet.
Zur Verdeutlichung: Der folgende Codeschnipsel hat 6 Statements.
function foo($bar) {
if ($bar->getValue() > 17) { // 1 (if), 2 (->getValue()), 3 (>)
return new Blub(2); // 4 (new), 5 (return)
}
return 2; // 6 (return)
}
config/**/*.yaml
) dürfen Sie ingesamt
maximal 15 Zeilen hinzufügen/bearbeiten.public
-Verzeichnis.
(Wenn Sie Ihre Anwendung auf Heroku deployen wollen, dürfen Sie dafür
eine Procfile
und eine apache.conf
anlegen.)Sie können dieses Test-Utility benutzen, um Ihre Implementierung gegen die Spezifikation zu prüfen. In der oben verlinkten Symfony-Doku finden Sie viele Informationen, die diese Aufgabe relativ leicht machen.