Schritt 9: Ein Admin-Backend einrichten

5.0 version
Maintained

Ein Admin-Backend einrichten

Das Hinzufügen von bevorstehenden Konferenzen zur Datenbank ist Aufgabe der Projektadministrator*innen. Ein Admin-Backend ist ein geschützter Bereich der Website, in dem Projektadministrator*innen die Website-Daten verwalten, Feedback-Einsendungen moderieren usw.

Wie können wir das schnell schaffen? Durch die Verwendung eines Bundles, das in der Lage ist, ein Admin-Backend basierend auf dem Modell des Projekts zu generieren. EasyAdmin ist genau das Richtige für Dich.

EasyAdmin konfigurieren

Füge zunächst EasyAdmin als Projektabhängigkeit hinzu:

1
$ symfony composer req "admin:^2.0"

Zur Konfiguration von EasyAdmin wurde über das Flex recipe eine neue Konfigurationsdatei erstellt:

config/packages/easy_admin.yaml
1
2
3
4
5
6
#easy_admin:
#    entities:
#        # List the entity class name you want to manage
#        - App\Entity\Product
#        - App\Entity\Category
#        - App\Entity\User

Fast alle installierten Pakete haben eine solche Konfiguration wie diese unter dem Verzeichnis config/packages/. In der Regel wurden die Standardeinstellungen sorgfältig ausgewählt, um für die meisten Anwendungen zu funktionieren.

Die ersten paar Zeilen kommentierst Du ein. Füge die Modellklassen des Projekts hinzu:

config/packages/easy_admin.yaml
1
2
3
4
easy_admin:
    entities:
        - App\Entity\Conference
        - App\Entity\Comment

Greife auf das generierte Admin-Backend unter /admin zu. Boom! Eine schöne und funktionsreiche Verwaltungsoberfläche für Konferenzen und Kommentare:

Tipp

Warum ist das Backend unter /admin? Das ist das Standardpräfix, das in config/routes/easy_admin.yaml festgelegt wurde:

config/routes/easy_admin.yaml
1
2
3
4
easy_admin_bundle:
    resource: '@EasyAdminBundle/Controller/EasyAdminController.php'
    prefix: /admin
    type: annotation

Du kannst es zu allem ändern, was du willst.

Das Hinzufügen von Konferenzen und Kommentaren ist noch nicht möglich, da Du eine Fehlermeldung erhalten würdest: Object of class App\Entity\Conference could not be converted to string. EasyAdmin versucht, die Konferenz in Bezug auf Kommentare anzuzeigen, kann dies aber nur tun, wenn die Konferenz in einem String repräsentiert werden kann. Behebe dies, indem Du eine __toString()-Methode zur Conference-Klasse hinzufügst:

patch_file
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--- a/src/Entity/Conference.php
+++ b/src/Entity/Conference.php
@@ -43,6 +43,11 @@ class Conference
         $this->comments = new ArrayCollection();
     }

+    public function __toString(): string
+    {
+        return $this->city.' '.$this->year;
+    }
+
     public function getId(): ?int
     {
         return $this->id;

Das Gleiche gilt für die Comment-Klasse:

patch_file
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--- a/src/Entity/Comment.php
+++ b/src/Entity/Comment.php
@@ -48,6 +48,11 @@ class Comment
      */
     private $photoFilename;

+    public function __toString(): string
+    {
+        return (string) $this->getEmail();
+    }
+
     public function getId(): ?int
     {
         return $this->id;

Du kannst Konferenzen nun direkt aus dem Admin-Backend hinzufügen, ändern oder löschen. Spiele damit und füge mindestens eine Konferenz hinzu.

Füge einige Kommentare ohne Fotos hinzu. Stelle das Datum vorerst manuell ein; wir werden die createdAt-Spalte in einem späteren Schritt automatisch ausfüllen.

EasyAdmin anpassen

Das Standard-Admin-Backend funktioniert gut, kann aber in vielerlei Hinsicht angepasst werden, um das Nutzungserlebnis zu verbessern. Lass uns einige einfache Änderungen vornehmen, um die Möglichkeiten zu demonstrieren. Ersetze die aktuelle Konfiguration durch Folgendes:

config/packages/easy_admin.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
easy_admin:
    site_name: Conference Guestbook

    design:
        menu:
            - { route: 'homepage', label: 'Back to the website', icon: 'home' }
            - { entity: 'Conference', label: 'Conferences', icon: 'map-marker' }
            - { entity: 'Comment', label: 'Comments', icon: 'comments' }

    entities:
        Conference:
            class: App\Entity\Conference

        Comment:
            class: App\Entity\Comment
            list:
                fields:
                    - author
                    - { property: 'email', type: 'email' }
                    - { property: 'createdAt', type: 'datetime' }
                sort: ['createdAt', 'ASC']
                filters: ['conference']
            edit:
                fields:
                    - { property: 'conference' }
                    - { property: 'createdAt', type: datetime, type_options: { attr: { readonly: true } } }
                    - 'author'
                    - { property: 'email', type: 'email' }
                    - text

Wir haben den design-Abschnitt überschrieben, um Icons zu den Menüpunkten sowie einen Link zurück zur Homepage hinzuzufügen.

Für den Comment-Abschnitt können wir die Felder durch Auflistung der Felder so sortieren, wie wir es wünschen. Einige Felder werden optimiert, wie z. B. das Erstellungsdatum auf schreibgeschützt setzen. Der filters-Abschnitt definiert, welche Filter über dem regulären Suchfeld angezeigt werden sollen.

Diese Anpassungen sind nur eine kleine Einführung in die Möglichkeiten von EasyAdmin.

Spiele mit dem Admin, filtere die Kommentare nach Konferenzen oder suche Kommentare z. B. nach E-Mail-Adresse. Das einzige Problem ist, dass jede*r auf das Backend zugreifen kann. Keine Sorge, wir werden es in einem der nächsten Schritt absichern.

1
$ symfony run psql -c "TRUNCATE conference RESTART IDENTITY CASCADE"

  • « Previous Schritt 8: Die Datenstruktur beschreiben
  • Next » Schritt 10: Die Benutzeroberfläche erstellen

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.