महत्वपूर्ण अनुस्मारक: किसी को कभी भी ऑब्जेक्ट मैनेजर को सीधे कॉल नहीं करना चाहिए
इस प्रकार यहां बताया गया है कि इसे कैसे साफ किया जाए
टेम्पलेट को छोड़कर किसी भी वर्ग में
आपको पहले अपने निर्माता में निम्न वर्ग को इंजेक्ट करने की आवश्यकता है /Magento/Customer/Model/Session
:
protected $_session;
public function __construct(
...
\Magento\Customer\Model\Session $session,
...
) {
...
$this->_session = $session;
...
}
फिर अपनी कक्षा में आप निम्नलिखित कॉल कर सकते हैं:
if ($this->_session->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
एक टेम्पलेट में
इसे टेम्प्लेट में थोड़ा और काम करने की आवश्यकता होती है क्योंकि आपको उस ब्लॉक के लिए प्राथमिकता तय करनी होगी जो टेम्पलेट को साफ करने के लिए प्रस्तुत करता है:
<preference for="Block\That\Renders\The\Template"
type="Vendor\Module\Block\Your\Custom\Block" />
फिर अपने कस्टम ब्लॉक कॉन्ट्रैक्टर में आपको किसी भी वर्ग के लिए उसी निर्भरता इंजेक्शन का पालन करने की आवश्यकता है (ऊपर समझाया गया है)।
यहां अतिरिक्त कदम की जाँच करने के लिए एक ग्राहक में हो या ना किया गया है या नहीं एक सार्वजनिक विधि है कि अपने खाके में इस्तेमाल किया जा सकता बनाने के लिए है
public function isCustomerLoggedIn()
{
return $this->_session->isLoggedIn();
}
फिर अपने टेम्पलेट में आप कॉल कर सकते हैं:
if ($block->isCustomerLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
वैकल्पिक यदि ग्राहक सत्र अभी तक आरंभ नहीं हुआ है
ऐसा करने का एक और तरीका है जिसका अर्थ है Magento\Framework\App\Http\Context
इसके बजाय का उपयोग करनाMagento/Customer/Model/Session
फिर आप यह जांचने के $this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
बजाय कॉल कर सकते हैं $this->_session->isLoggedIn()
कि ग्राहक लॉग इन है या नहीं।
हालाँकि यह विधि आपको अलग परिणाम दे सकती है , मेरा सुझाव है कि आप अधिक जानकारी के लिए इस महान उत्तर को पढ़ें: https://magento.stackexchange.com/a/92133/2380