重要なお知らせ:オブジェクトマネージャーを直接呼び出さないでください
したがって、ここでそれをきれいに行う方法です
テンプレートを除くすべてのクラス
まず、コンストラクターに次のクラスを挿入する必要があります/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" />
次に、カスタムブロックコントラクタで、任意のクラス(上記で説明)と同じ依存性注入に従う必要があります。
ここでの追加手順は、テンプレートで使用できるパブリックメソッドを作成して、顧客がログインしているかどうかを確認することです。
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