src/Action/Product/GetDetailAction.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Action\Product;
  4. use App\Module\Inquiry\Business\Builder\InquiryDataBuilder;
  5. use App\Provider\VariantStructuredDataBuilder;
  6. use Denios\Data\Product\Product;
  7. use Denios\Data\Product\Variant;
  8. use Psr\Log\LoggerInterface;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  10. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  11. /**
  12. * Get product detail
  13. *
  14. * @author Michel Chowanski <michel.chowanski@bestit-online.de>
  15. * @package App\Action\Product
  16. */
  17. class GetDetailAction
  18. {
  19. public const PAGE_TYPE_PRODUCT = 'product';
  20. private InquiryDataBuilder $inquiryDataBuilder;
  21. private VariantStructuredDataBuilder $structuredDataBuilder;
  22. private LoggerInterface $logger;
  23. public function __construct(InquiryDataBuilder $inquiryDataBuilder, LoggerInterface $logger,VariantStructuredDataBuilder $structuredDataBuilder)
  24. {
  25. $this->inquiryDataBuilder = $inquiryDataBuilder;
  26. $this->logger = $logger;
  27. $this->structuredDataBuilder = $structuredDataBuilder;
  28. }
  29. /**
  30. * Get product detail
  31. *
  32. * @Template(template="pages/product/get_detail.html.twig")
  33. *
  34. * @return array
  35. */
  36. public function __invoke(Product $product, Variant $variant): array
  37. {
  38. if(isset($variant->structuredData)){
  39. $variantStructuredData = $variant->structuredData->toArray();
  40. } else {
  41. $this->logger->warning('SKU: '.$product->id.' has no structured Data, use slow fallback');
  42. $variantStructuredData = $this->structuredDataBuilder->buildStructuredDataByVariant($variant);
  43. }
  44. return [
  45. 'product' => $product,
  46. 'variant' => $variant,
  47. 'page_type' => self::PAGE_TYPE_PRODUCT,
  48. 'variantStructuredData' => $variantStructuredData,
  49. 'structuredProducts' => $this->inquiryDataBuilder->buildFromVariant($variant)
  50. ];
  51. }
  52. }