Magento2 में IdentityInterface क्या है


20

मैं देखता हूं कि Magento 2 में बहुत सारे मॉडल लागू होते हैं Magento\Framework\DataObject\IdentityInterface
इस इंटरफ़ेस में एक एकल विधि है जिसे विधि getIdentities
का कार्यान्वयन आमतौर पर वापस आ जाता है return [self::CACHE_TAG . '_' . $this->getId()];

एक उदाहरण यहां पाया जा सकता है
कि इसका उपयोग किस लिए किया जाता है?


मैं वास्तव में नहीं जानता कि अगर इसका उपयोग किया जाता है, लेकिन क्लास dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.phpफाइल में मौजूद है, तो शायद इसे बाद में हटाने का इरादा है।
मथेओ जियोफ्रे 12

2
वर्ग की टिप्पणी को देखते हुए इसका उपयोग कैश के लिए किया जाता है और एक अद्वितीय इकाई आईडी बनाते हैं और ईएसआई हेडर vendor/magento/module-page-cache/Controller/Block/Esi.phpलाइन 28 में इस्तेमाल किया जाता है
मथेओ जियोफ्रे

@ MatthéoGeoffray हाँ तुम सही हो, लेकिन getIdentitiesविधि को इस मामले में एक ब्लॉक वर्ग पर बुलाया जाता है, ओपी मॉडल कक्षाओं के बारे में पूछ रहा है
राफेल एट डिजिटल पियानोवाद

ओह हां मेरा बुरा;)
मथेओ जियोफ्रे

@ MatthéoGeoffray। मेरे विचार से आप सही है। आप अपनी टिप्पणी को उत्तर के रूप में रखना चाह सकते हैं।
मेरियस

जवाबों:


24

मैंने जो कुछ समझा, उससे यह 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();
}

एम 2 में, आपको अब getIdentitiesमॉडल स्तर पर विधि के साथ कैश टैग घोषित करना होगा , फिर आप उन मॉडलों का संदर्भ देने वाले ब्लॉकों में इसका उपयोग कर सकते हैं।

यदि आप getIdentitiesविधि को लागू करने वाले प्रत्येक ब्लॉक की जांच करते हैं , तो वे सभी एक संबंधित मॉडल getIdentitiesविधि या एक संबंधित मॉडल कैश टैग जैसे\Magento\Catalog\Model\Product::CACHE_TAG

फिर उन ब्लॉक getIdentitiesविधियों का उपयोग 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);

5
सावधान रहें - पहचान केवल पूर्ण पृष्ठ कैश के लिए है। ब्लॉक कैश के लिए आपको अभी भी cache_tags और cache_lifetime लागू करना होगा! यह एक जोड़ है, प्रतिस्थापन नहीं।
रॉबर्ट एगिंटन

मैं एक गतिशील ब्लॉक के साथ एक पृष्ठ में FPC रखना चाहता था, इसलिए मुझे ब्लॉक में getIdentities को लागू करना था, लेकिन मॉडल (मेरे मामले में स्लाइडर) बच्चे के मॉडल (बैनर) में परिवर्तन पर भी निर्भर करता है, क्या मुझे दोनों को पहचान की श्रेणी में जोड़ना चाहिए ? या बच्चे के परिवर्तन का मतलब केवल माता-पिता की जरूरत है? साभार @RobertEgginton
medmek

6

वर्ग की Magento\Framework\DataObject\IdentityInterfaceटिप्पणी को देखते हुए इसका उपयोग कैश के लिए किया जाता है और एक अद्वितीय इकाई आईडी बनाते हैं जिसका उपयोग वार्निश ईएसआई हेडर में vendor/magento/module-page-cache/Controller/Block/Esi.phpलाइन 28 में किया जाता है।

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

1

IdentityInterface मॉडल वर्ग को getIdentities () विधि को परिभाषित करने के लिए मजबूर करेगा जो मॉडल के लिए एक अद्वितीय आईडी लौटाएगा। यदि आपके मॉडल को डेटाबेस ऑपरेशन के बाद कैश रीफ्रेश और फ्रंटएंड पेज पर जानकारी रेंडर करनी हो तो आपको केवल इस इंटरफेस का उपयोग करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.