Nach meinem Verständnis ist dies eine Art Äquivalenz der getCacheTags
Methode von Magento 1.
Die getIdentities
from-Modellklassen werden dann in jeder Blockklasse verwendet, die auf dieses Modell verweist.
Ok, nehmen wir die /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;
}
Auf diese Methode wird dann verwiesen in /Magento/Catalog/Block/Category/View.php
:
public function getIdentities()
{
return $this->getCurrentCategory()->getIdentities();
}
In M2 müssen Sie jetzt das Cache-Tag mit der getIdentities
Methode auf Modellebene deklarieren. Anschließend können Sie es in Blöcken verwenden, die auf diese Modelle verweisen.
Wenn Sie jeden Block überprüfen, der die getIdentities
Methode implementiert , verweisen alle auf eine entsprechende Modellmethode getIdentities
oder ein entsprechendes Modell-Cache-Tag wie z\Magento\Catalog\Model\Product::CACHE_TAG
Dann werden diese getIdentities
Blockmethoden in Varnish aus Caching-Gründen verwendet, wie von Matthéo erwähnt, um den X-Magento-Tags
Header zu setzen .
Dieser Header wird dann Magento/Framework/App/PageCache/Kernel.php
in der process()
Methode verwendet, um den Cache zu speichern:
$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
Datei vorhanden, sodass sie möglicherweise später entfernt werden soll.