Wichtiger Hinweis: Man sollte niemals den Objektmanager direkt anrufen
Also hier ist, wie man es auf saubere Weise macht
In jeder Klasse außer Vorlagen
Sie müssen zuerst die folgende Klasse in Ihren Konstruktor einfügen /Magento/Customer/Model/Session
:
protected $_session;
public function __construct(
...
\Magento\Customer\Model\Session $session,
...
) {
...
$this->_session = $session;
...
}
Dann können Sie in Ihrer Klasse Folgendes anrufen:
if ($this->_session->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
In einer Vorlage
Es erfordert ein wenig mehr Arbeit in einer Vorlage, da Sie eine Voreinstellung für den Block einrichten müssen, der die Vorlage so sauber macht:
<preference for="Block\That\Renders\The\Template"
type="Vendor\Module\Block\Your\Custom\Block" />
Dann müssen Sie in Ihrem benutzerdefinierten Block-Contrusktor die gleiche Abhängigkeitsinjektion wie für eine beliebige Klasse durchführen (siehe oben).
Der zusätzliche Schritt besteht darin, eine öffentliche Methode zu erstellen, mit der in Ihrer Vorlage überprüft werden kann, ob ein Kunde angemeldet ist oder nicht
public function isCustomerLoggedIn()
{
return $this->_session->isLoggedIn();
}
Dann können Sie in Ihrer Vorlage Folgendes aufrufen:
if ($block->isCustomerLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Alternative, wenn die Kundensitzung noch nicht initialisiert ist
Es gibt noch einen anderen Weg, der die Verwendung Magento\Framework\App\Http\Context
anstelle von impliziertMagento/Customer/Model/Session
Sie können dann anrufen, $this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
anstatt $this->_session->isLoggedIn()
zu überprüfen, ob der Kunde angemeldet ist oder nicht.
Wie auch immer diese Methode zu unterschiedlichen Ergebnissen führen mag , ich empfehle Ihnen, diese großartige Antwort zu lesen, um weitere Informationen zu erhalten: https://magento.stackexchange.com/a/92133/2380