据我了解,这相当于getCacheTags
Magento 1方法的等效性。
在getIdentities
从模型类,然后在每一个块级引用此模型中使用。
好吧,让我们/Magento/Catalog/Model/Category.php
:
public function getIdentities()
{
$identities = [
self::CACHE_TAG . '_' . $this->getId(),
];
if ($this->hasDataChanges() || $this->isDeleted()) {
$identities[] = Product::CACHE_PRODUCT_CATEGORY_TAG . '_' . $this->getId();
}
return $identities;
}
然后在/Magento/Catalog/Block/Category/View.php
以下方法中引用此方法:
public function getIdentities()
{
return $this->getCurrentCategory()->getIdentities();
}
在M2中,您现在必须getIdentities
在模型级别使用方法声明缓存标签,然后可以在引用这些模型的块中使用它。
如果检查实现该getIdentities
方法的每个块,它们都将引用相应的模型getIdentities
方法或相应的模型缓存标记,例如\Magento\Catalog\Model\Product::CACHE_TAG
然后getIdentities
,由于Matthéo提到的缓存原因,在Varnish中使用了这些块方法来设置X-Magento-Tags
标头。
然后,Magento/Framework/App/PageCache/Kernel.php
在process()
方法中使用此标头保存高速缓存:
$tagsHeader = $response->getHeader('X-Magento-Tags');
$tags = $tagsHeader ? explode(',', $tagsHeader->getFieldValue()) : [];
$response->clearHeader('Set-Cookie');
$response->clearHeader('X-Magento-Tags');
if (!headers_sent()) {
header_remove('Set-Cookie');
}
$this->cache->save(serialize($response), $this->identifier->getValue(), $tags, $maxAge);
dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
文件中,因此可能打算稍后删除。