Önemli hatırlatma: Kişi asla doğrudan Nesne Yöneticisini aramamalı
İşte burada nasıl temiz bir şekilde yapılacağını
Şablonlar hariç herhangi bir sınıfta
Öncelikle yapıcınıza aşağıdaki sınıfı enjekte etmeniz gerekir /Magento/Customer/Model/Session
:
protected $_session;
public function __construct(
...
\Magento\Customer\Model\Session $session,
...
) {
...
$this->_session = $session;
...
}
Sonra sınıfınızda aşağıdakileri arayabilirsiniz:
if ($this->_session->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Bir şablonda
Bir şablonda biraz daha fazla çalışma gerektirir çünkü şablonu temiz bir şekilde yapmasını sağlayan blok için bir tercih belirlemeniz gerekir:
<preference for="Block\That\Renders\The\Template"
type="Vendor\Module\Block\Your\Custom\Block" />
Sonra, özel blok kırıcınızda, herhangi bir sınıf için olduğu gibi aynı bağımlılık enjeksiyonunu izlemeniz gerekir (yukarıda açıklanmıştır).
Buradaki ek adım, bir müşterinin giriş yapıp yapmadığını kontrol etmek için şablonunuzda kullanılabilecek ortak bir yöntem oluşturmaktır.
public function isCustomerLoggedIn()
{
return $this->_session->isLoggedIn();
}
Ardından şablonunuzda arayabilirsiniz:
if ($block->isCustomerLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Müşteri oturumu henüz başlatılmadıysa alternatif
Bunu yapmak Magento\Framework\App\Http\Context
yerine kullanmanın bir yolu var .Magento/Customer/Model/Session
Sonra müşterinin giriş yapıp yapmadığını kontrol etmek $this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
yerine arayabilirsin $this->_session->isLoggedIn()
.
Ancak bu yöntem size farklı sonuçlar verebilir, daha fazla bilgi için bu harika cevabı okumanızı öneririm: https://magento.stackexchange.com/a/92133/2380