Pengingat penting: Seseorang seharusnya tidak pernah memanggil Object Manager secara langsung
Jadi, inilah cara melakukannya dengan cara yang bersih
Di kelas mana pun kecuali template
Anda pertama-tama harus menyuntikkan kelas berikut di konstruktor Anda /Magento/Customer/Model/Session
::
protected $_session;
public function __construct(
...
\Magento\Customer\Model\Session $session,
...
) {
...
$this->_session = $session;
...
}
Kemudian di kelas Anda, Anda dapat memanggil yang berikut:
if ($this->_session->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Dalam sebuah templat
Ini membutuhkan sedikit lebih banyak pekerjaan dalam templat karena Anda harus menyiapkan preferensi untuk blok yang membuat templat untuk melakukannya dengan cara yang bersih:
<preference for="Block\That\Renders\The\Template"
type="Vendor\Module\Block\Your\Custom\Block" />
Kemudian di contrusctor blok khusus Anda, Anda perlu mengikuti injeksi dependensi yang sama seperti untuk kelas apa pun (dijelaskan di atas).
Langkah ekstra di sini adalah membuat metode publik yang dapat digunakan dalam templat Anda untuk memeriksa apakah pelanggan masuk atau tidak
public function isCustomerLoggedIn()
{
return $this->_session->isLoggedIn();
}
Kemudian dalam templat Anda, Anda dapat menghubungi:
if ($block->isCustomerLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Alternatif jika sesi pelanggan belum diinisialisasi
Ada cara lain untuk melakukannya yang menyiratkan menggunakan Magento\Framework\App\Http\Context
bukanMagento/Customer/Model/Session
Kemudian Anda dapat menelepon $this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
alih-alih $this->_session->isLoggedIn()
untuk memeriksa apakah pelanggan masuk atau tidak.
Namun metode ini dapat memberi Anda hasil yang berbeda , saya sarankan Anda membaca jawaban yang bagus ini untuk informasi lebih lanjut: https://magento.stackexchange.com/a/92133/2380