Promemoria importante: non si dovrebbe mai chiamare direttamente l'Object Manager
Ecco quindi come farlo in modo pulito
In qualsiasi classe tranne i modelli
Devi prima iniettare la seguente classe nel tuo costruttore /Magento/Customer/Model/Session
::
protected $_session;
public function __construct(
...
\Magento\Customer\Model\Session $session,
...
) {
...
$this->_session = $session;
...
}
Quindi nella tua classe puoi chiamare quanto segue:
if ($this->_session->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
In un modello
Richiede un po 'più di lavoro in un modello in quanto dovrai impostare una preferenza per il blocco che rende il modello per farlo in modo pulito:
<preference for="Block\That\Renders\The\Template"
type="Vendor\Module\Block\Your\Custom\Block" />
Quindi nel tuo block control personalizzato devi seguire la stessa iniezione di dipendenza di qualsiasi classe (spiegata sopra).
Il passaggio aggiuntivo qui è quello di creare un metodo pubblico che può essere utilizzato nel modello per verificare se un cliente ha effettuato l'accesso o meno
public function isCustomerLoggedIn()
{
return $this->_session->isLoggedIn();
}
Quindi nel tuo modello puoi chiamare:
if ($block->isCustomerLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Alternativa se la sessione del cliente non è ancora inizializzata
C'è un altro modo di farlo che implica l'uso Magento\Framework\App\Http\Context
invece diMagento/Customer/Model/Session
Quindi puoi chiamare $this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
invece di $this->_session->isLoggedIn()
verificare se il cliente ha effettuato l'accesso o meno.
Tuttavia, questo metodo può darti risultati diversi , ti suggerisco di leggere questa ottima risposta per ulteriori informazioni: https://magento.stackexchange.com/a/92133/2380