중요한 알림 : Object Manager를 직접 호출해서는 안됩니다.
따라서 깨끗한 방법으로 수행하는 방법은 다음과 같습니다.
템플릿을 제외한 모든 클래스
먼저 생성자에 다음 클래스를 주입해야합니다. /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