16
16
use Magento \ConfigurableProduct \Model \Product \Type \Configurable ;
17
17
use Magento \Framework \Api \FilterBuilder ;
18
18
use Magento \Framework \Api \SearchCriteriaBuilder ;
19
+ use Magento \Framework \App \CacheInterface ;
19
20
use Magento \Framework \App \ObjectManager ;
20
21
use Magento \Framework \DataObject ;
22
+ use Magento \Framework \Event \Manager as EventManager ;
21
23
use Magento \Framework \Indexer \ActionInterface ;
22
24
use Magento \Framework \Indexer \CacheContext ;
23
- use Magento \Indexer \Model \Indexer \DeferredCacheCleaner ;
24
25
25
26
/**
26
27
* Plugin product resource model
@@ -55,14 +56,19 @@ class Product
55
56
private $ filterBuilder ;
56
57
57
58
/**
58
- * @var DeferredCacheCleaner
59
+ * @var CacheContext
59
60
*/
60
- private $ cacheCleaner ;
61
+ private $ cacheContext ;
61
62
62
63
/**
63
- * @var CacheContext
64
+ * @var EventManager
64
65
*/
65
- private $ cacheContext ;
66
+ private $ eventManager ;
67
+
68
+ /**
69
+ * @var CacheInterface
70
+ */
71
+ private $ appCache ;
66
72
67
73
/**
68
74
* Initialize Product dependencies.
@@ -72,17 +78,19 @@ class Product
72
78
* @param ProductAttributeRepositoryInterface|null $productAttributeRepository
73
79
* @param SearchCriteriaBuilder|null $searchCriteriaBuilder
74
80
* @param FilterBuilder|null $filterBuilder
75
- * @param DeferredCacheCleaner|null $cacheCleaner
76
81
* @param CacheContext|null $cacheContext
82
+ * @param EventManager|null $eventManager
83
+ * @param CacheInterface|null $appCache
77
84
*/
78
85
public function __construct (
79
86
Configurable $ configurable ,
80
87
ActionInterface $ productIndexer ,
81
88
ProductAttributeRepositoryInterface $ productAttributeRepository = null ,
82
89
?SearchCriteriaBuilder $ searchCriteriaBuilder = null ,
83
90
?FilterBuilder $ filterBuilder = null ,
84
- ?DeferredCacheCleaner $ cacheCleaner = null ,
85
- ?CacheContext $ cacheContext = null
91
+ ?CacheContext $ cacheContext = null ,
92
+ ?EventManager $ eventManager = null ,
93
+ ?CacheInterface $ appCache = null
86
94
) {
87
95
$ this ->configurable = $ configurable ;
88
96
$ this ->productIndexer = $ productIndexer ;
@@ -92,8 +100,9 @@ public function __construct(
92
100
->get (SearchCriteriaBuilder::class);
93
101
$ this ->filterBuilder = $ filterBuilder ?: ObjectManager::getInstance ()
94
102
->get (FilterBuilder::class);
95
- $ this ->cacheCleaner = $ cacheCleaner ?? ObjectManager::getInstance ()->get (DeferredCacheCleaner::class);
96
103
$ this ->cacheContext = $ cacheContext ?? ObjectManager::getInstance ()->get (CacheContext::class);
104
+ $ this ->eventManager = $ eventManager ?? ObjectManager::getInstance ()->get (EventManager::class);
105
+ $ this ->appCache = $ appCache ?? ObjectManager::getInstance ()->get (CacheInterface::class);
97
106
}
98
107
99
108
/**
@@ -133,9 +142,13 @@ public function afterSave(
133
142
): ProductResource {
134
143
$ configurableProductIds = $ this ->configurable ->getParentIdsByChild ($ object ->getId ());
135
144
if (count ($ configurableProductIds ) > 0 ) {
136
- $ this ->cacheCleaner ->start ();
137
145
$ this ->cacheContext ->registerEntities (ProductModel::CACHE_TAG , $ configurableProductIds );
138
- $ this ->cacheCleaner ->flush ();
146
+ $ this ->eventManager ->dispatch ('clean_cache_by_tags ' , ['object ' => $ this ->cacheContext ]);
147
+ $ identities = $ this ->cacheContext ->getIdentities ();
148
+ if (!empty ($ identities )) {
149
+ $ this ->appCache ->clean ($ identities );
150
+ $ this ->cacheContext ->flush ();
151
+ }
139
152
}
140
153
141
154
return $ result ;
0 commit comments