Шаг 9: Создание административной панели
Создание административной панели¶
Именно администраторы проекта будут добавлять предстоящие конференции в базу данных. Административная панель — это защищённый раздел сайта, где администраторы проекта могут изменять данные, модерировать отзывы и многое другое.
Можно быстро сгенерировать панель администрирования на базе модели проекта, используя один из бандлов. EasyAdmin как раз то, что нам нужно.
Настройка бандла EasyAdmin¶
Для начала добавьте бандл EasyAdmin в зависимости проекта:
1 | $ symfony composer req "admin:^2"
|
Для настройки EasyAdmin по его Flex-рецепту был создан новый конфигурационный файл:
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
|
Почти все установленные пакеты имеют подобный файл с конфигурацией в директории config/packages/
. Чаще всего настройки по умолчанию отлично подходят для большинства приложений.
Раскомментируйте первую пару строк и добавьте классы моделей проекта:
1 2 3 4 | easy_admin:
entities:
- App\Entity\Conference
- App\Entity\Comment
|
Перейдите в браузере по пути /admin
к уже готовой административной панели. И вуаля! У нас уже есть красивый и многофункциональный интерфейс для управления конференциями и комментариями:

Совет
Почему административная панель доступна по адресу /admin
? Всё потому, что использовался префикс по умолчанию, заданный в файле config/routes/easy_admin.yaml
:
1 2 3 4 | easy_admin_bundle:
resource: '@EasyAdminBundle/Controller/EasyAdminController.php'
prefix: /admin
type: annotation
|
Вы можете изменить его на что угодно.
В данный момент невозможно добавить новые конференции и комментарии, поскольку произойдёт ошибка конвертации объекта в строку — Object of class App\Entity\Conference could not be converted to string
. Бандл EasyAdmin попытается отобразить конференцию с комментариями к ней, но в итоге не сможет этого сделать, потому что нет строкового представления обоих сущностей. Добавление метода __toString()
в класс Conference
поможет устранить ошибку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --- a/src/Entity/Conference.php
+++ b/src/Entity/Conference.php
@@ -44,6 +44,11 @@ class Conference
$this->comments = new ArrayCollection();
}
+ public function __toString(): string
+ {
+ return $this->city.' '.$this->year;
+ }
+
public function getId(): ?int
{
return $this->id;
|
То же самое сделайте в классе Comment
:
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;
|
Теперь вы можете добавлять, изменять и удалять конференции непосредственно из административной панели. Изучите его интерфейс и добавьте хотя бы одну конференцию.

Добавьте несколько комментариев без фотографий. Пока установите дату вручную, затем в следующих шагах мы сделаем автозаполнение столбца createdAt
.

Настройка EasyAdmin¶
Административная панель по умолчанию работает хорошо, хотя она может по-разному настраиваться, чтобы улучшить удобство её использования. Внесем несколько простых изменений для демонстрации доступных вариантов. Заменим стандартную конфигурацию на следующую:
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: { disabled: true } }
- 'author'
- { property: 'email', type: 'email' }
- text
|
Мы переопределили секцию design
, чтобы добавить иконки в меню, а также ссылку на главную страницу сайта.
В секции Comment
перечисление полей позволяет расположить их в нужном нам порядке. Некоторые поля были дополнены дополнительными настройками. К примеру, поле с датой создания доступно только для чтения. Секция filters
определяет, какие фильтры будут находится рядом с обычным полем поиска.

Это всего лишь небольшая часть возможных настроек в EasyAdmin.
Ознакомьтесь с административной панелью, отфильтруйте комментарии по какой-нибудь конференции или, например, найдите их по адресу электронной почты. Однако есть последняя неразрешённая проблема — любой пользователь может войти в панель администрирования. Мы это обязательно исправим в следующих шагах.
1 | $ symfony run psql -c "TRUNCATE conference RESTART IDENTITY CASCADE"
|
- « Previous Шаг 8: Описание структуры данных
- Next » Шаг 10: Создание пользовательского интерфейса
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.