BuchController

Als nächsten Schritt wird die Liste der angelegten Bücher auf der Hauptseite ausgegeben. Dafür ist ein Kontroller in der Datei BuchController.php im Verzeichnis \src\AppBundle\Controller\ anzulegen:

In der Buch.php wurde die folgende Hilfsfunktion hinzugefügt:

Die BuchController-Klasse erweitert die Klasse Controller. Innerhalb des Kommentares für die Klasse sowie innerhalb des Kommentares für die einzelnen Funktionen der Klasse werden Annotationen eingefügt, die Zusatzinformationen beinhalten. Diese Annotationen werden durch Symfony ausgewertet und dem Kontroller automatisch zusätzliche Funktionalität hinzugefügt. In unserem Falle befindet sich hier eine Annotation namens @Route. Wird ein Request abgesetzt, so sorgt Symfony dafür, dass versucht wird, diesen auf sämtliche Routing-Annotationen zu matchen. Diejenige Annotation, die hier am besten passt, wird ausgewählt und die Funktion durch Symfony aufgerufen. Als ersten Parameter erhält die Routingannotation einen String, auf den gemacht wird. Als zweiter Parameter wird ein Name der Route übergeben. Dieser Name kann später beispielsweise genutzt werden, um die Route auch programmatisch aus dem Code heraus anzusteuern. Zusätzlich ist eine @Method-Annotation zu finden. Diese sorgt in dem gezeigten Fall dafür, dass nur GET-Requests gematcht werden.

Innerhalb der ersten Anweisung der Funktion indexAction wird Doctrine angewiesen, die Repository-Klasse der Buch-Klasse zu laden. Die Repository-Klasse stellt unser Data-Access-Objekt (DAO) dar. In unserer Implementierung ist die Repository-Klasse als Annotation innerhalb der Entity angegeben und wird während des automatischen Generierens der Entity innerhalb des Verzeichnisses \src\AppBundle\Repository\ miterzeugt. Sie bleibt leer. Da sie jedoch von der Überklasse EntityRepository erbt, sind unterschiedliche Funktionen in dieser verfügbar. Die findAll()-Funktion sorgt dafür, dass alle vorhandenen Bücher aus der Datenbank geladen werden und als Objekt-Array zurückgegeben werden. Weitere Funktionen werden durch die Respository-Klasse angegeben. Die Funktion find() sucht ein Objekt anhand der Id des Objektes. Zusätzlich werden die Funktionen findOneByXXX() angegeben, wobei XXX für ein beliebiges Variablefeld der Klasse steht. Somit könnten Bücher beispielsweise auch mit findOneByTitel() unter Angabe eines Titels aus der Datenbank geladen werden.

Im weiteren ist eine foreach-Schleife zu finden, die die Objekte aus der Datenbank aufbereitet, so dass die Informationen in das Template eingefügt werden können. Besonders wird hier die Funktion getOffeneEntleihung() genutzt, um den Status des Buches darzustellen. Dieser Status ist in dem Entleihungs-Objekt hinterlegt, welches noch kein Rückgabedatum beinhaltet. Anders herum ausgedrückt bedeutet der Zustand, dass eine Entleihung noch keine Rückgabe beinhaltet, dass das Buch ausgeliehen ist. Aus dem Entleihungs-Objekt kann der Entleiher und das späteste Rückgabedatum abgelesen werden.

Zuletzt werden die erstellten Informationen dem Template übergeben, dessen Nutzung der folgende Abschnitt beschreibt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.