Pas 9: Configurarea unei interfețe de administrare

5.0 version
Maintained

Configurarea unei interfețe de administrare

Adăugarea conferințelor viitoare în baza de date va fi sarcina administratorilor de proiect. O interfață de administrare este o secțiune protejată a site-ului web în care administratorii pot gestiona datele site-ului, pot modera recenziile și multe altele.

Cum o putem crea rapid? Folosind un pachet care este capabil să genereze partea de administrare după modelul proiectului. EasyAdmin se potrivește perfect.

Configurarea EasyAdmin

Mai întâi, adaugă EasyAdmin ca dependență de proiect:

1
$ symfony composer req "admin:^2.0"

Pentru a configura EasyAdmin, a fost generat un nou fișier de configurare prin rețeta sa Flex:

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

Aproape toate pachetele instalate au o configurație ca aceasta în directorul config/packages/. De cele mai multe ori, valorile implicite au fost alese cu atenție pentru a funcționa la majoritatea aplicațiilor.

Decomentează primele două linii și adaugă clasele modelului din proiect:

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

Accesează interfața generată la /admin. Boom! O interfață de administrare plăcută și bogată în funcționalități pentru conferințe și comentarii:

Sfat

De ce este accesibilă interfața sub /admin? Pentru că acesta este prefixul implicit configurat în 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

Îl poți schimba în orice vrei.

Adăugarea conferințelor și a comentariilor nu este încă posibilă, deoarece vei primi o eroare: Object of class App\Entity\Conference could not be converted to string (obiectul din clasa AppEntityConference nu a putut fi afișat ca un sir de caractere). EasyAdmin încearcă să afișeze conferința legată de comentarii, dar poate face acest lucru numai dacă există o reprezentare sub forma unui șir de caractere a unei conferințe. Asta se rezolvă prin adăugarea metodei __toString () în clasa 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;

La fel și pentru clasa 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;

Acum poți adăuga, modifica sau șterge conferințe direct din interfața de administrare. Testează-l adăugând cel puțin o conferință.

Adaugă și câteva comentarii fără fotografii. Setează manual data creării, pentru moment; vom completa automat coloana createdAt într-o etapă ulterioară.

Personalizarea EasyAdmin

Interfața de administrare funcționează bine, dar poate fi personalizată pentru a îmbunătăți experiența utilizatorului. Să facem câteva modificări simple pentru a demonstra ce putem schimba. Înlocuiește configurația curentă cu următoarele:

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

Am înlocuit secțiunea design pentru a adăuga pictograme la elementele de meniu și pentru a adăuga o legătură înapoi la pagina principală a site-ului web.

Pentru secțiunea Comment, listarea câmpurilor ne permite să le ordonăm așa cum ne dorim. Unele câmpuri sunt modificate, cum ar fi afișarea datei de creare doar pentru citire. Secțiunea filters definește ce filtre vor fi expuse în partea de sus, lângă formularul de căutare obișnuit.

Aceste personalizări sunt doar o mică introducere a posibilităților oferite de EasyAdmin.

Joacă-te cu interfața. De exemplu, filtrează comentariile după conferință sau caută comentarii semnate cu o anumită adresă de email. Singura problemă este că oricine poate avea acces la backend. Nu-ți face griji, îl vom restricționa imediat.

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

  • « Previous Pas 8: Descrierea structurii datelor
  • Next » Pas 10: Construirea interfeței pentru utilizator

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