src/EventSubscriber/EasyAdminSubscriber.php line 67

Open in your IDE?
  1. <?php
  2. # src/EventSubscriber/EasyAdminSubscriber.php
  3. namespace App\EventSubscriber;
  4. use App\Controller\Admin\ProductCrudController;
  5. use App\Entity\Product;
  6. use App\Entity\Traits\UpdatableInterface;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  8. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  10. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  11. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. use Symfony\Component\Security\Core\Security;
  16. class EasyAdminSubscriber implements EventSubscriberInterface
  17. {
  18.     /** @var AdminUrlGenerator  */
  19.     private $adminUrlGenerator;
  20.     /** @var Security  */
  21.     private $security;
  22.     public function __construct(AdminUrlGenerator $adminUrlGeneratorSecurity $security)
  23.     {
  24.         $this->adminUrlGenerator $adminUrlGenerator;
  25.         $this->security $security;
  26.     }
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             BeforeCrudActionEvent::class => ['redirectDetail'],
  31.             BeforeEntityPersistedEvent::class => ['prePersist'],
  32.             BeforeEntityUpdatedEvent::class => ['preUpdate']
  33.         ];
  34.     }
  35.     public function redirectDetail(BeforeCrudActionEvent $event)
  36.     {
  37.         $entity $event->getAdminContext()->getEntity()->getInstance();
  38.         if ($event->getAdminContext()->getCrud()->getCurrentAction() == "detail") {
  39.             $entityName $event->getAdminContext()->getEntity()->getFqcn();
  40.             $entityName explode("\\"$entityName);
  41.             $entityName $entityName[2];
  42.             $url $this->adminUrlGenerator
  43.                 ->setController(("App\Controller\Admin\\" $entityName "CrudController"))
  44.                 ->setAction(Action::EDIT)
  45.                 ->setEntityId($entity->getId())
  46.                 ->generateUrl();
  47.             $event->setResponse(new RedirectResponse($url));
  48.         }
  49.     }
  50.     public function prePersist(BeforeEntityPersistedEvent $event)
  51.     {
  52.         $entity $event->getEntityInstance();
  53.         if ($entity instanceof UpdatableInterface) {
  54.             $entity->setCreatedAt(new \DateTime());
  55.             $entity->setCreator($this->security->getUser());
  56.         }
  57.     }
  58.     public function preUpdate(BeforeEntityUpdatedEvent $event)
  59.     {
  60.         $entity $event->getEntityInstance();
  61.         if ($entity instanceof UpdatableInterface) {
  62.             $entity->setUpdatedAt(new \DateTime());
  63.             $entity->setUpdator($this->security->getUser());
  64.         }
  65.     }
  66. }