내가 이해 한 바에 따르면, 이것은 마 getCacheTags
젠토 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가 언급 한 것처럼 캐시를 위해 바니시에서 이러한 블록 방법을 사용하여 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
파일에 있으므로 나중에 제거하려고합니다.