Административная панель Symfony
Создание административной панели
Symfony Components - пакеты, реализующие основные функции и абстракции низкого уровня, которые необходимы большинству приложений (маршрутизация, консоль, HTTP-клиент, почтовый клиент, кеш и др.)
Symfony Bundles - пакеты, которые добавляют высокоуровневые возможности или обеспечивают интеграцию со сторонними библиотеками (пакеты в основном создаются сообществом). Один из таких пакетов (бандлов) является EasyAdmin
#добавим бандл EasyAdmin в зависимости проекта:
composer require easycorp/easyadmin-bundle
#Или так
symfony composer req "easycorp/easyadmin-bundle:^4"
#Чистим кэш
php bin/console cache:clear
Для работы EasyAdmin требуются сущности Doctrine ORM (Doctrine ODM не поддерживается). EasyAdmin использует Twig Components для создания своего интерфейса.
EasyAdmin автоматически генерирует админ-панель из определённых контроллеров в приложении.
#Создание административной панели
symfony console make:admin:dashboard
Контроллеры, относящиеся к админ-панели, по умолчанию определяются в собственном пространстве имён App\Controller\Admin.
Чтобы посмотреть созданную административную панель в браузере перейдите по пути /admin
Источник: https://symfony.com/doc/6.4/the-fast-track/ru/9-backend.html
CRUD-контроллер
CRUD — это аббревиатура от "Create, Read, Update и Delete" ("Создать, Прочитать, Обновить, Удалить"), четырёх основных операций, которые можно проделать над любой сущностью
#Сгенерировать CRUD-контроллер
#Выберите 1, чтобы создать контроллер с CRUD-действиями
symfony console make:admin:crud
В результате будет сгенерирован контроллер src/Controller/Admin/ContentCrudController.php
Остаётся добавить в src/Controller/Admin/DashboardController.php новые CRUD-интерфейсы конференций и комментариев в админпанель
Для этого необходимо переопределить метод configureMenuItems()
Загрузчик маршрутов создаст все необходимые маршруты для каждого контроллера CRUD.
Дашборды
Дашборды — это входные точки серверных приложений, которые связаны с одним или несколькими сущностями
Для реализации дашборда сначала создается CRUD-контроллер для опрееделенной сущности
Далее необходимо создать панель управления, к которой можно привязать контроллер CRUD сущности
Дашборды — это обычные Symfony-контроллеры, поэтому вы можете делать с ними все то же, что и с обычными контроллерами, например внедрять сервисы
Классы контроллеров панели управления должны реализовывать интерфейс EasyCorp\Bundle\EasyAdminBundle\Contracts\Controller\DashboardControllerInterface, который гарантирует наличие определенных методов в панели управления
Источник: https://symfony.com/bundles/EasyAdminBundle/4.x/crud.html#crud-controller-pages
# Чтобы быстро создать контроллер панели управления, выполните следующую команду
php bin/console make:admin:dashboard
Маршрут панели управления должен быть определен с помощью атрибута #[AdminDashboard]
#[AdminDashboard(routePath: '/admin', routeName: 'admin')]
class DashboardController extends AbstractDashboardController
Конфигурация панели управления
Конфигурация панели управления определяется в методе configureDashboard()
Источник: https://symfony.com/bundles/EasyAdminBundle/4.x/dashboards.html
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('Symfony Netbash');
}
Настройка содержимого панели мониторинга
Содержимое панели управления настраивается в методе index класса DashboardController
Поскольку index() является частью интерфейса Dashboard, вы не можете добавлять к нему аргументы для внедрения зависимостей (например, ChartBuilderInterface в приведенном выше примере). Вместо этого внедряйте зависимости в конструктор контроллера или используйте имя метода, отличное от тех, что определены в интерфейсе.
Источник: https://symfony.com/bundles/EasyAdminBundle/4.x/dashboards.html
public function index(): Response
{
...
}
Безопасность
EasyAdmin использует Symfony Security для обеспечения безопасности
Прежде чем ограничить доступ к панели управления, необходимо создать роли:
https://symfony.com/doc/current/security.html#a-create-your-user-class
И настроить брандмауэр:
https://symfony.com/doc/current/security.html#a-authentication-firewalls
Все маршруты, относящиеся к данной панели управления, имеют общий префикс (например, /admin).
Это упрощает защиту бэкенда, поскольку вы можете использовать опцию access_control, чтобы указать Symfony, какие разрешения требуются при переходе по этому URL-адресу:
# config/packages/security.yaml
security:
# ...
access_control:
# change '/admin' to the prefix used by your Dashboard URLs
- { path: ^/admin, roles: ROLE_ADMIN }
# ...
В качестве альтернативы можно использовать атрибут #[IsGranted]. Однако это может быть неудобно, поскольку его нужно применять ко всем контроллерам панели управления и ко всем контроллерам CRUD
Источник: https://symfony.com/bundles/EasyAdminBundle/4.x/security.html






