src/Controller/ProductController.php line 21

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\Entity\Product\ProductInterface;
  5. use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
  6. use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
  7. use Sylius\Component\Core\Model\TaxonInterface;
  8. use Sylius\Component\Resource\Model\ResourceInterface;
  9. use Sylius\Component\Resource\ResourceActions;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Twig\Environment;
  13. use function preg_replace;
  14. class ProductController extends ResourceController
  15. {
  16.     public function showAction(Request $request): Response
  17.     {
  18.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  19.         $this->isGrantedOr403($configurationResourceActions::SHOW);
  20.         $resource $this->findOr404($configuration);
  21.         $event $this->eventDispatcher->dispatch(ResourceActions::SHOW$configuration$resource);
  22.         $eventResponse $event->getResponse();
  23.         if ($eventResponse !== null) {
  24.             return $eventResponse;
  25.         }
  26.         if ($configuration->isHtmlRequest()) {
  27.             /** @phpstan-ignore-next-line */
  28.             return $this->render($this->lookForSpecificTemplate($configuration$resource), [
  29.                 'configuration' => $configuration,
  30.                 'metadata' => $this->metadata,
  31.                 'resource' => $resource,
  32.                 $this->metadata->getName() => $resource,
  33.             ]);
  34.         }
  35.         return $this->createRestView($configuration$resource);
  36.     }
  37.     /** @param ProductInterface $product */
  38.     private function lookForSpecificTemplate(RequestConfiguration $configurationResourceInterface $product): string
  39.     {
  40.         /** @var string $template */
  41.         $template $configuration->getTemplate(ResourceActions::SHOW '.html');
  42.         if (! $product->getMainTaxon() instanceof TaxonInterface) {
  43.             return $template;
  44.         }
  45.         $code $product->getMainTaxon()->getCode();
  46.         /** @var string $specificTemplate */
  47.         $specificTemplate preg_replace('/(.*\/)([^\/]*)(\.html\.twig)/''${1}' $code '${3}'$template);
  48.         /** @var Environment $twig */
  49.         $twig $this->get('twig');
  50.         return $twig->getLoader()->exists($specificTemplate) ? $specificTemplate $template;
  51.     }
  52. }