การแจ้งเตือนที่สำคัญ: เราไม่ควรเรียก Object Manager โดยตรง
ดังนั้นนี่คือ วิธีการทำความสะอาด
ในชั้นเรียนใด ๆ ยกเว้นแม่แบบ
คุณต้องฉีดคลาสต่อไปนี้ใน Constructor ของคุณก่อน/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" />
จากนั้นใน contrusctor บล็อกที่กำหนดเองของคุณคุณจะต้องติดตามฉีดเหมือนกันสำหรับชั้นเรียนใด ๆ (อธิบายข้างต้น)
ขั้นตอนพิเศษที่นี่คือการสร้างวิธีการของประชาชนที่สามารถนำมาใช้ในแม่แบบของคุณเพื่อตรวจสอบว่าลูกค้าจะเข้าสู่ระบบหรือไม่
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