Magento2'de IdentityInterface nedir


20

Magento 2'deki birçok modelin uygulandığını görüyorum Magento\Framework\DataObject\IdentityInterface.
Bu arabirim adlı tek bir yönteme sahiptir. Yöntemin getIdentities
uygulamaları genellikle geri döner return [self::CACHE_TAG . '_' . $this->getId()];.

Bir örnek burada bulunabilir
Bu ne için kullanılır?


Gerçekten kullanılıp kullanılmadığını bilmiyorum ama dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.phpbelki dosya daha sonra kaldırılması amaçlanmıştır dosyada mevcut .
Matthéo Geoffray

2
Sınıf yorumuna bakılırsa, önbellek için kullanılır ve benzersiz bir varlık kimliği oluşturur ve ESI başlık vendor/magento/module-page-cache/Controller/Block/Esi.phpsatırında kullanılır 28
Matthéo Geoffray

@ MatthéoGeoffray evet haklısın ama getIdentitiesyöntem bu durumda bir blok sınıfında çağrıldı, OP model sınıflarını soruyor
Raphael Dijital Piyanizm'de

Ah evet doğru benim kötü;)
Matthéo Geoffray

@ MatthéoGeoffray. Bence haklısın. Yorumunuzu cevap olarak koymak isteyebilirsiniz.
Marius

Yanıtlar:


24

Anladığım kadarıyla, bu getCacheTagsMagento 1 yönteminin eşdeğerliğidir .

getIdentitiesModel sınıflardan bu modelden her blok sınıfı kullanılır.

Tamam şunu alalım /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;
}

Bu yönteme daha sonra şu durumlarda referans verilir /Magento/Catalog/Block/Category/View.php:

public function getIdentities()
{
    return $this->getCurrentCategory()->getIdentities();
}

M2'de, şimdi getIdentitiesmodel düzeyinde yöntemle önbellek etiketini bildirmeniz gerekir , daha sonra bu modelleri referans alan bloklarda kullanabilirsiniz.

getIdentitiesYöntemi uygulayan her bloğu kontrol ederseniz , bunların tümü karşılık gelen bir model getIdentitiesyöntemine veya karşılık gelen bir model önbellek etiketine başvurur.\Magento\Catalog\Model\Product::CACHE_TAG

Daha sonra bu blok getIdentitiesyöntemler, Verné'de, X-Magento-Tagsbaşlığı ayarlamak için Matthéo tarafından belirtildiği gibi önbellekleme nedenleriyle kullanılır .

Bu başlık daha sonra kullanılır Magento/Framework/App/PageCache/Kernel.phpde process()önbellek kaydetmek için yöntemiyle:

$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);

5
Dikkatli olun - kimlikler yalnızca tam sayfa önbellek içindir. Blok önbellek için hala cache_tags ve cache_lifetime uygulamanız gerekir! Bu bir ilave, bir yedek değil.
Robert Egginton

FPC'yi dinamik bir bloğa sahip bir sayfada tutmak istedim, bu yüzden blokta getIdentities'i uygulamak zorunda kaldım, ancak model (benim durumumda Slider), alt öğe modundaki değişikliklere de bağlı (Banner), her iki kimlik dizisine de eklemeliyim ? veya çocuk değişikliği sadece ebeveynin gerekli olduğu anlamına mı gelir? thank you @RobertEgginton
medmek

6

Sınıf Magento\Framework\DataObject\IdentityInterfaceyorumuna bakarak, önbellek için kullanılır ve vendor/magento/module-page-cache/Controller/Block/Esi.php28. satırdaki Vernik ESI başlıklarında kullanılan benzersiz bir varlık kimliği oluşturur .

if ($blockInstance instanceof \Magento\Framework\DataObject\IdentityInterface) {
   $response->setHeader('X-Magento-Tags', implode(',', $blockInstance->getIdentities()));
}

1

IdentityInterface, Model sınıfını model için benzersiz bir kimlik döndürecek getIdentities () yöntemini tanımlamaya zorlar. Bu arabirimi yalnızca, modelinizin veritabanı işleminden sonra önbellek yenilemesi ve ön uç sayfasına bilgi vermesi gerekiyorsa kullanmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.