ম্যাজেন্টো 2-তে আইডেন্টিটি ইন্টারফেস কী


20

আমি দেখতে পাচ্ছি যে ম্যাজেন্টো 2-তে অনেকগুলি মডেল প্রয়োগ করে Magento\Framework\DataObject\IdentityInterface
এই ইন্টারফেসটির একটি একক পদ্ধতি রয়েছে যাকে পদ্ধতির getIdentities
প্রয়োগগুলি সাধারণত ফিরে আসে return [self::CACHE_TAG . '_' . $this->getId()];

একটি উদাহরণ এখানে পাওয়া যেতে পারে এটি
কি জন্য ব্যবহার করা হয়?


এটি ব্যবহার করা হয়েছে কিনা তা আমি সত্যিই জানি না তবে ক্লাসটি dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.phpফাইলটিতে উপস্থিত রয়েছে তাই সম্ভবত এটি পরে সরিয়ে ফেলার উদ্দেশ্যে করা হয়েছে।
ম্যাথো জিওফ্রে

2
শ্রেণীর মন্তব্যে বিচার করে এটি ক্যাশে ব্যবহৃত হয় এবং একটি অনন্য সত্তা আইডি তৈরি হয় এবং ESI শিরোনাম vendor/magento/module-page-cache/Controller/Block/Esi.phpলাইন ২৮
ম্যাথো জিওফ্রে

@ ম্যাথো জিওফ্রে হ্যাঁ আপনি ঠিক বলেছেন তবে এই getIdentitiesপদ্ধতিতে ব্লক ক্লাসে পদ্ধতিটি আহ্বান করা হয়েছে, ওপি মডেল ক্লাস সম্পর্কে জিজ্ঞাসা করছে
ডিজিটাল পিয়ানিজম

ওহ হ্যাঁ আমার খারাপ;)
ম্যাথথো জেফ্রে

@ MatthéoGeoffray। আমি আপনি ঠিক মনে করেন. আপনি উত্তর হিসাবে আপনার মন্তব্য রাখতে চাইবেন।
Marius

উত্তর:


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
সতর্কতা অবলম্বন করুন - পরিচয়গুলি কেবলমাত্র পুরো পৃষ্ঠার ক্যাশের জন্য। ব্লক ক্যাশে আপনার এখনও ক্যাশে_ট্যাগ এবং ক্যাশে_লাইফটাইম প্রয়োগ করতে হবে! এটি একটি সংযোজন, কোনও প্রতিস্থাপন নয়।
রবার্ট অ্যাগিংটন

আমি এফপিসিটিকে একটি গতিশীল ব্লকের সাথে একটি পৃষ্ঠায় রাখতে চেয়েছিলাম যাতে আমাকে ব্লকটিতে getIdentities প্রয়োগ করতে হবে, তবে মডেল (আমার ক্ষেত্রে স্লাইডার) শিশু মডেল (ব্যানার) পরিবর্তনের উপরও নির্ভর করে, আমি কি পরিচয় অ্যারে উভয়ই যুক্ত করব? ? বা শিশু পরিবর্তন মানে কি কেবল পিতামাতার দরকার? আপনাকে ধন্যবাদ @
রবার্ট

6

শ্রেণীর Magento\Framework\DataObject\IdentityInterfaceমন্তব্যে বিচার করে এটি ক্যাশে ব্যবহৃত হয় এবং একটি অনন্য সত্তা আইডি তৈরি করে যা vendor/magento/module-page-cache/Controller/Block/Esi.php২৮ নং লাইনে ওয়ার্নিশ ইএসআই শিরোনামে ব্যবহৃত হয় ।

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

1

আইডেন্টিটি ইন্টারফেসটি মডেল ক্লাসকে getIdentities () পদ্ধতিটি সংজ্ঞায়িত করতে বাধ্য করবে যা মডেলের জন্য একটি অনন্য আইডি ফিরিয়ে দেবে। আপনার মডেলটিকে ডেটাবেস অপারেশনের পরে ক্যাশে রিফ্রেশ করা দরকার এবং সম্মুখ পৃষ্ঠায় তথ্য সরবরাহ করতে হবে তবে আপনার এই ইন্টারফেসটি কেবলমাত্র ব্যবহার করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.