EasyAdmin4 Symfony6 ERR_EMPTY_RESPONSE to go on edit page

Viewed 24

I'm just starting to use easyadmin4. I managed to generate a dashboard. I followed the Symfony doc. Only when I click on the 'edit' button I get the following error.

I realized that the generated url concatenated two url (perhaps normal) but if I delete the second one I arrive on my editing page.

http://hoursmanagerv2.fr/admin?crudAction=edit&crudControllerFqcn=App%5CController%5CAdmin%5CJobCrudController&entityId=2&menuIndex=3&referrer=http://hoursmanagerv2.fr/admin?crudAction%3Dindex%26crudControllerFqcn%3DApp%255CController%255CAdmin%255CJobCrudController%26menuIndex%3D3%26submenuIndex%3D0&submenuIndex=0

here is my code for the dashboard

<?php

namespace App\Controller\Admin;

use App\Entity\Job;
use App\Entity\Task;
use App\Entity\Type;
use App\Entity\Place;
use App\Entity\Nature;
use App\Entity\Period;
use App\Entity\Department;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use App\Controller\Admin\DepartmentCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use Symfony\Component\Security\Core\User\UserInterface;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;

class DashboardController extends AbstractDashboardController
{

    public function __construct(
        private AdminUrlGenerator $adminUrlGenerator
    ){
    }

    #[Route('/admin', name: 'admin')]
    public function index(): Response
    {
        $adminUrlGenerator = $this->container->get(AdminUrlGenerator::class);
        return $this->redirect($adminUrlGenerator->setController(DepartmentCrudController::class)->generateUrl());
        return parent::index();
    }

    public function configureDashboard(): Dashboard
    {
        return Dashboard::new()
            ->setTitle('Administration Emploi du temps agent')
            ->setFaviconPath('favicon.svg')
            ;
    }

    public function configureMenuItems(): iterable
    {
        yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');

        yield MenuItem::section('Paramètres', 'fas fa-gears');

        yield MenuItem::subMenu('Service', 'fas fa-building')->setSubItems([
            MenuItem::linkToCrud('Liste des services', 'fas fa-eye', Department::class)->setAction(Crud::PAGE_INDEX),
            MenuItem::linkToCrud('Ajouter un service', 'fas fa-plus', Department::class)->setAction(Crud::PAGE_NEW)
        ]);

        yield MenuItem::subMenu('Métier', 'fas fa-briefcase')->setSubItems([
            MenuItem::linkToCrud('Liste des métiers', 'fas fa-eye', Job::class)->setAction(Crud::PAGE_INDEX),
            MenuItem::linkToCrud('Ajouter un metier', 'fas fa-plus', Job::class)->setAction(Crud::PAGE_NEW)
        ]);

        yield MenuItem::subMenu('Nature', 'fas fa-tag')->setSubItems([
            MenuItem::linkToCrud('Liste des natures', 'fas fa-eye', Nature::class),
            MenuItem::linkToCrud('Ajouter une nature', 'fas fa-plus', Nature::class)->setAction(Crud::PAGE_NEW)
        ]);

        yield MenuItem::subMenu('Période', 'fas fa-calendar-minus')->setSubItems([
            MenuItem::linkToCrud('Liste des périodes', 'fas fa-eye', Period::class),
            MenuItem::linkToCrud('Ajouter une période', 'fas fa-plus', Period::class)->setAction(Crud::PAGE_NEW)
        ]);

        yield MenuItem::subMenu('Lieux', 'fas fa-map-pin')->setSubItems([
            MenuItem::linkToCrud('Liste des lieux', 'fas fa-eye', Place::class),
            MenuItem::linkToCrud('Ajouter un lieu', 'fas fa-plus', Place::class)->setAction(Crud::PAGE_NEW)
        ]);

        yield MenuItem::subMenu('Tache', 'fas fa-hammer')->setSubItems([
            MenuItem::linkToCrud('Liste des tâches', 'fas fa-eye', Task::class),
            MenuItem::linkToCrud('Ajouter une tache', 'fas fa-plus', Task::class)->setAction(Crud::PAGE_NEW)
        ]);

        yield MenuItem::subMenu('Type', 'fas fa-check-to-slot')->setSubItems([
            MenuItem::linkToCrud('Liste des tâches', 'fas fa-eye', Type::class),
            MenuItem::linkToCrud('Ajouter une tache', 'fas fa-plus', Type::class)->setAction(Crud::PAGE_NEW)
        ]);
        // yield MenuItem::linkToCrud('The Label', 'fas fa-list', EntityClass::class);
    }

    public function configureUserMenu(UserInterface $user): UserMenu
    {
        $userMenu = parent::configureUserMenu($user);
        $userMenu->setMenuItems([]);
        return $userMenu;
    }
}

here is my code for the crud of one of my entity

<?php

namespace App\Controller\Admin;

use App\Entity\Department;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;

class DepartmentCrudController extends AbstractCrudController
{


    public static function getEntityFqcn(): string
    {
        return Department::class;
    }

    public function configureCrud(Crud $crud): Crud
    {
        return $crud
            ->setEntityLabelInSingular('Service')
            ->setEntityLabelInPlural('Services')
            ->setDateFormat('d/m/Y')
            ->setPageTitle('detail', fn (Department $department) => (string) $department)
            ->setPageTitle('edit', fn (department $department) => sprintf('Modification du service <b>%s</b>', $department->getName()))
            
        ;
    }
    
    public function configureFields(string $pageName): iterable
    {
        return [
            IdField::new('id')->hideOnForm(),
            TextField::new('name')->setLabel('Nom du service'),
            AssociationField::new('manager')->setLabel('Chef de service')->autocomplete(),
            TextField::new('phone')->setLabel('Téléphone'),
            TextField::new('code')->hideOnForm(),
            DateTimeField::new('createdAt')->hideOnForm(),
            DateTimeField::new('updatedAt')->hideOnForm(),
            DateTimeField::new('deletedAt')->hideOnForm(),
            BooleanField::new('isActive')->hideOnForm()
        ];
    }

    public function configureActions(Actions $actions): Actions
    {
        return $actions
        ;
    }
    
    public function persistEntity(EntityManagerInterface $em, $entityInstance): void
    {
        if($entityInstance instanceof Department)
        {
            $code = strtoupper((substr($entityInstance->getName(), 0, 5)));
            $entityInstance->setCreatedAt(new \DateTime('now'));
            $entityInstance->setIsActive(true);
            $entityInstance->setCode($code);

            parent::persistEntity($em, $entityInstance);
        }
    }
}

is the generation of the link normal?

if you need more information let me know.

Thanks for your help

0 Answers
Related