custom/plugins/H1webBlog/src/Storefront/Page/Tag/TagPageLoader.php line 71

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace H1web\Blog\Storefront\Page\Tag;
  3. use Shopware\Core\Content\Cms\Exception\PageNotFoundException;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. class TagPageLoader
  14. {
  15.     /**
  16.      * @var GenericPageLoaderinterface
  17.      */
  18.     private $genericLoader;
  19.     /**
  20.      * @var EventDispatcherInterface
  21.      */
  22.     private $eventDispatcher;
  23.     /**
  24.      * @var EntityRepository
  25.      */
  26.     private $tagRepository;
  27.     /**
  28.      * @var EntityRepository
  29.      */
  30.     private $blogRepository;
  31.     public function __construct(
  32.         GenericPageLoaderinterface $genericLoader,
  33.         EventDispatcherInterface $eventDispatcher,
  34.         EntityRepository $tagRepository,
  35.         EntityRepository $blogRepository
  36.     ) {
  37.         $this->eventDispatcher $eventDispatcher;
  38.         $this->genericLoader $genericLoader;
  39.         $this->tagRepository $tagRepository;
  40.         $this->blogRepository $blogRepository;
  41.     }
  42.     /**
  43.      * @throws PageNotFoundException
  44.      */
  45.     public function load(string $tagIdRequest $requestSalesChannelContext $context): TagPage
  46.     {
  47.         try {
  48.             $page $this->genericLoader->load($request$context);
  49.             $page TagPage::createFrom($page);
  50.             $criteria = new Criteria();
  51.             $criteria->addAssociation('visibilities');
  52.             $criteria->addFilter(new ContainsFilter('tagIds'$tagId));
  53.             $criteria->addFilter(new MultiFilter(
  54.                 MultiFilter::CONNECTION_AND, [
  55.                     new EqualsFilter('visibilities.salesChannelId'$context->getSalesChannelId())
  56.                 ]
  57.             ));
  58.             $this->eventDispatcher->dispatch(new TagPageCriteriaEvent($criteria$context$request));
  59.             /* @var EntityCollection $blogs */
  60.             $blogs $this->blogRepository->search(
  61.                 $criteria,
  62.                 $context->getContext()
  63.             );
  64.             $page->setBlogs($blogs);
  65.             /* @var EntityCollection $entities */
  66.             $entities $this->tagRepository->search(
  67.                 new Criteria([$tagId]),
  68.                 $context->getContext()
  69.             );
  70.             $page->setTag($entities->first());
  71.             $page->getMetaInformation()->setMetaTitle($entities->first()->getName());
  72.             $this->eventDispatcher->dispatch(new TagPageLoadedEvent($page$context$request));
  73.             return $page;
  74.         } catch (\Exception $e) {
  75.             throw new PageNotFoundException($tagId);
  76.         }
  77.     }
  78. }