Etap 9: Konfigurowanie panelu administracyjnego

5.0 version
Maintained

Konfigurowanie panelu administracyjnego

Dodawanie nadchodzących konferencji do bazy danych jest zadaniem administratorów i administratorek projektu. Panel administracyjny to chroniona część strony internetowej, w której osoby korzystające z konta administracyjnego mogą zarządzać danymi strony internetowej, moderować przesłane opinie i wiele innych.

Jak możemy to szybko stworzyć? Za pomocą pakietu, który jest w stanie wygenerować panel administracyjny w oparciu o model projektu. EasyAdmin idealnie się do tego nadaje.

Konfigurowanie EasyAdmin

Po pierwsze, dodaj EasyAdmin jako zależność do projektu:

1
$ symfony composer req "admin:^2.0"

Za pomocą przepisu (ang. recipe) Flex wygenerowany został nowy plik konfiguracyjny, umożliwiający konfigurację biblioteki EasyAdmin.

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

Prawie wszystkie zainstalowane pakiety mają taką konfigurację w katalogu config/packages/. W większości przypadków domyślne ustawienia zostały starannie dobrane tak, aby działały w większości aplikacji.

Odkomentuj kilka pierwszych linii i dodaj klasy modeli z projektu:

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

Wejdź do wygenerowanego panelu administracyjnego odwiedzając /admin. Bum! Oto ładny i bogaty w funkcje interfejs administracyjny dla konferencji i komentarzy:

Wskazówka

Dlaczego panel jest dostępny pod /admin? To domyślny prefiks skonfigurowany w config/routes/easy_admin.yaml:

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

Możesz go zmienić na cokolwiek zechcesz.

Dodawanie konferencji i komentarzy nie jest jeszcze możliwe, ponieważ wystąpiłby błąd: Object of class App\Entity\Conference could not be converted to string. EasyAdmin próbuje wyświetlić konferencje powiązane z komentarzami, ale może to zrobić tylko wtedy, gdy istnieje reprezentacja tekstowa konferencji. Naprawmy to przez dodanie metody __toString() do klasy Conference:

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;

Zrób to samo dla klasy Comment:

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;

Teraz możesz dodawać/modyfikować/usuwać konferencje bezpośrednio z panelu administracyjnego. Pobaw się nim i dodaj co najmniej jedną konferencję.

Dodaj kilka komentarzy bez zdjęć. Na razie ustaw datę ręcznie; kolumnę createdAt wypełnimy automatycznie w późniejszym kroku.

Dostosowywanie EasyAdmin

Domyślny panel administracyjny działa dobrze, ale można go dostosować na wiele sposobów, aby usprawnić jego działanie. Zróbmy kilka prostych zmian, aby zademonstrować jego możliwości. Zastąp bieżącą konfigurację poniższą:

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

Zastąpiliśmy sekcję design, aby dodać ikony do pozycji w menu i dodaliśmy odnośnik do strony głównej naszego projektu.

Wyszczególnienie pól w sekcji Comment pozwala nam ustawić je w takiej kolejności, jak chcemy. Niektóre pola są lekko zmodyfikowane, np. data utworzenia staje się wartością tylko do odczytu. Sekcja filters definiuje filtry, które będą dostępne wraz z zwykłym polem wyszukiwania.

Te modyfikacje są tylko małą prezentacją możliwości, jakie daje nam EasyAdmin.

Pobaw się panelem administracyjnym, wyfiltruj komentarze po konferencji lub na przykład wyszukuj je po adresie e-mail. Jedynym problemem jest to, że każdy ma do niego dostęp. Nie martw się, zabezpieczymy go w przyszłości.

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

  • « Previous Etap 8: Opis struktury danych
  • Next » Etap 10: Tworzenie interfejsu użytkownika

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