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