EasyaAmin 3 — Динамически скрывать / показывать действия на основе базового объекта

#symfony #easyadmin

#symfony #easyadmin

Вопрос:

Есть ли какой-либо способ показать / скрыть действия на основе базового объекта? Например, мне нужно показать действие удаления объекта категории тогда и только тогда, когда у него нет дочерней записи.

Я пытался удалить это из configureActions метода в моем CRUD-контроллере, но у меня нет доступа к AdminContext объекту при вызове этого метода.

Как я могу это сделать?

Ответ №1:

После отслеживания в базе кода EasyAdmin я нашел это решение:

Представьте, что у меня есть Category сущность, имеющая OneToMany отношение к сообщениям. Мне нужно показать delete действие каждой категории, если в категории нет какой-либо записи.

     public function configureActions(Actions $actions): Actions
    {
        $action = parent::configureActions($actions)->getAsDto(Crud::PAGE_INDEX)->getAction(Crud::PAGE_INDEX, Action::DELETE);

        if (!is_null($action)) {
            $action->setDisplayCallable(function (Category $category) {
                return $category->getPosts()->count() === 0;
            });   
        }

        return $actions;
    }