I have one problem in my application with symfony. I want generate URL on my Admin Back office for get to 'index' in my Order after the change a state of my order but I have this error:
Argument 1 passed to EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator::setController() must be of the type string, null given
I use Easyadmin v3.5
Below, my OrderCrudController:
<?php
namespace App\Controller\Admin;
use App\Controller\OrderController;
use App\Entity\Order;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
class OrderCrudController extends AbstractCrudController
{
private $entityManager;
private $crudUrlGenerator;
public function __construct(EntityManagerInterface $entityManager, AdminUrlGenerator $crudUrlGenerator)
{
$this->entityManager = $entityManager;
$this->crudUrlGenerator = $crudUrlGenerator;
}
public static function getEntityFqcn(): string
{
return Order::class;
}
public function configureActions(Actions $actions): Actions
{
$updatePreparation = Action::new('updatePreparation', 'Préparation en cours')->linkToCrudAction('updatePreparation');
$updateDelivery = Action::new('updateDelivery', 'Livraison en cours','fas fa-truck')->linkToCrudAction('updateDelivery');
return $actions
->add('detail', $updatePreparation)
->add('detail', $updateDelivery)
->add('index','detail');
}
public function updatePreparation(AdminContext $context)
{
$order = $context->getEntity()->getInstance();
$order->setState(2);
$this->entityManager->flush();
$this->addFlash('notice',"<span style='color:green;'><strong>La commande".$order->getReference()."est bien <u>en cours de préparation</u></strong></span>");
$url= $this->crudUrlGenerator->build()
->setController(OrderCrudController::class)
->setAction('index')
->generateUrl();
return $this->redirect($url);
}
public function updateDelivery(AdminContext $context)
{
$order = $context->getEntity()->getInstance();
$order->setState(3);
$this->entityManager->flush();
$this->addFlash('notice',"<span style='color:orange;'><strong>La commande".$order->getReference()."est bien <u>en cours de livraison</u></strong></span>");
$url= $this->crudUrlGenerator->build()
->setController(OrderCrudController::class)
->setAction('index')
->generateUrl();
return $this->redirect($url);
}
public function configureCrud(Crud $crud): Crud
{
return $crud->setDefaultSort(['id' => 'DESC']);
}
public function configureFields(string $pageName): iterable
{
return [
IdField::new('id'),
DateTimeField::new('createdAt','Passé le'),
TextField::new('user.getFullname','Client'),
MoneyField::new('total')->setCurrency('EUR'),
MoneyField::new('carrier.price', 'Frais de port')->setCurrency('EUR'),
ChoiceField::new('state', 'Etat')->setChoices([
'Non payée'=> 0,
'Payée' => 1,
'Préparation en cours' => 2,
'Livraison en cours'=> 3
]),
ArrayField::new('orderDetails', 'Produits achetés')->hideOnIndex()
];
}
}
Thank you for your help.