vendor/easycorp/easyadmin-bundle/src/ArgumentResolver/BatchActionDtoResolver.php line 32

Open in your IDE?
  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\ArgumentResolver;
  3. use EasyCorp\Bundle\EasyAdminBundle\Config\Option\EA;
  4. use EasyCorp\Bundle\EasyAdminBundle\Dto\BatchActionDto;
  5. use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
  6. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
  9. use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
  10. /**
  11.  * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  12.  */
  13. final class BatchActionDtoResolver implements ArgumentValueResolverInterface
  14. {
  15.     private $adminContextProvider;
  16.     private $adminUrlGenerator;
  17.     public function __construct(AdminContextProvider $adminContextProviderAdminUrlGenerator $adminUrlGenerator)
  18.     {
  19.         $this->adminContextProvider $adminContextProvider;
  20.         $this->adminUrlGenerator $adminUrlGenerator;
  21.     }
  22.     public function supports(Request $requestArgumentMetadata $argument): bool
  23.     {
  24.         return BatchActionDto::class === $argument->getType();
  25.     }
  26.     public function resolve(Request $requestArgumentMetadata $argument): iterable
  27.     {
  28.         if (null === $context $this->adminContextProvider->getContext()) {
  29.             throw new \RuntimeException(sprintf('Some of your controller actions have type-hinted an argument with the "%s" class but that\'s only available for actions run to serve EasyAdmin requests. Remove the type-hint or make sure the action is part of an EasyAdmin request.'BatchActionDto::class));
  30.         }
  31.         $batchActionUrl $context->getRequest()->request->get(EA::BATCH_ACTION_URL);
  32.         $batchActionUrlQueryString parse_url($batchActionUrl, \PHP_URL_QUERY);
  33.         parse_str($batchActionUrlQueryString$batchActionUrlParts);
  34.         $referrerUrl $batchActionUrlParts[EA::REFERRER] ?? $this->adminUrlGenerator->unsetAll()->generateUrl();
  35.         yield new BatchActionDto(
  36.             $context->getRequest()->request->get(EA::BATCH_ACTION_NAME),
  37.             $context->getRequest()->request->all()[EA::BATCH_ACTION_ENTITY_IDS] ?: [],
  38.             $context->getRequest()->request->get(EA::ENTITY_FQCN),
  39.             $referrerUrl,
  40.             $context->getRequest()->request->get(EA::BATCH_ACTION_CSRF_TOKEN)
  41.         );
  42.     }
  43. }