66namespace Magento \CatalogUrlRewrite \Observer ;
77
88use Magento \Catalog \Model \Product ;
9+ use Magento \CatalogUrlRewrite \Model \ProductUrlPathGenerator ;
910use Magento \CatalogUrlRewrite \Model \ProductUrlRewriteGenerator ;
11+ use Magento \Framework \App \ObjectManager ;
1012use Magento \UrlRewrite \Model \UrlPersistInterface ;
11- use Magento \UrlRewrite \Service \V1 \Data \UrlRewrite ;
1213use Magento \Framework \Event \ObserverInterface ;
1314
15+ /**
16+ * Class ProductProcessUrlRewriteSavingObserver
17+ */
1418class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
1519{
1620 /**
@@ -24,21 +28,32 @@ class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
2428 private $ urlPersist ;
2529
2630 /**
27- * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
28- * @param UrlPersistInterface $urlPersist
31+ * @var ProductUrlPathGenerator
32+ */
33+ private $ productUrlPathGenerator ;
34+
35+ /**
36+ * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
37+ * @param UrlPersistInterface $urlPersist
38+ * @param ProductUrlPathGenerator|null $productUrlPathGenerator
2939 */
3040 public function __construct (
3141 ProductUrlRewriteGenerator $ productUrlRewriteGenerator ,
32- UrlPersistInterface $ urlPersist
42+ UrlPersistInterface $ urlPersist ,
43+ ProductUrlPathGenerator $ productUrlPathGenerator = null
3344 ) {
3445 $ this ->productUrlRewriteGenerator = $ productUrlRewriteGenerator ;
3546 $ this ->urlPersist = $ urlPersist ;
47+ $ this ->productUrlPathGenerator = $ productUrlPathGenerator ?: ObjectManager::getInstance ()
48+ ->get (ProductUrlPathGenerator::class);
3649 }
3750
3851 /**
3952 * Generate urls for UrlRewrite and save it in storage
53+ *
4054 * @param \Magento\Framework\Event\Observer $observer
4155 * @return void
56+ * @throws \Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException
4257 */
4358 public function execute (\Magento \Framework \Event \Observer $ observer )
4459 {
@@ -51,6 +66,8 @@ public function execute(\Magento\Framework\Event\Observer $observer)
5166 || $ product ->dataHasChangedFor ('visibility ' )
5267 ) {
5368 if ($ product ->isVisibleInSiteVisibility ()) {
69+ $ product ->unsUrlPath ();
70+ $ product ->setUrlPath ($ this ->productUrlPathGenerator ->getUrlPath ($ product ));
5471 $ this ->urlPersist ->replace ($ this ->productUrlRewriteGenerator ->generate ($ product ));
5572 }
5673 }
0 commit comments