ProcessUrlRewriteSavingObserver.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CmsUrlRewrite\Observer;
  7. use Magento\Framework\Event\Observer as EventObserver;
  8. use Magento\UrlRewrite\Model\UrlPersistInterface;
  9. use Magento\Framework\Event\ObserverInterface;
  10. use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
  11. use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
  12. class ProcessUrlRewriteSavingObserver implements ObserverInterface
  13. {
  14. /**
  15. * @var \Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator
  16. */
  17. protected $cmsPageUrlRewriteGenerator;
  18. /**
  19. * @var UrlPersistInterface
  20. */
  21. protected $urlPersist;
  22. /**
  23. * @param \Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator $cmsPageUrlRewriteGenerator
  24. * @param UrlPersistInterface $urlPersist
  25. */
  26. public function __construct(CmsPageUrlRewriteGenerator $cmsPageUrlRewriteGenerator, UrlPersistInterface $urlPersist)
  27. {
  28. $this->cmsPageUrlRewriteGenerator = $cmsPageUrlRewriteGenerator;
  29. $this->urlPersist = $urlPersist;
  30. }
  31. /**
  32. * Generate urls for UrlRewrite and save it in storage
  33. *
  34. * @param \Magento\Framework\Event\Observer $observer
  35. * @return void
  36. */
  37. public function execute(EventObserver $observer)
  38. {
  39. /** @var $cmsPage \Magento\Cms\Model\Page */
  40. $cmsPage = $observer->getEvent()->getObject();
  41. if ($cmsPage->dataHasChangedFor('identifier') || $cmsPage->dataHasChangedFor('store_id')) {
  42. $urls = $this->cmsPageUrlRewriteGenerator->generate($cmsPage);
  43. $this->urlPersist->deleteByData([
  44. UrlRewrite::ENTITY_ID => $cmsPage->getId(),
  45. UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE,
  46. ]);
  47. $this->urlPersist->replace($urls);
  48. }
  49. }
  50. }