Como obter o ID do cliente da sessão? Eu tentei isso, mas não funcionou.
protected $_customerBonusPointFactory;
protected $_customerSession;
public function __construct(Session $customerSession, \Magento\Framework\View\Element\Template\Context $context) {
$this->_customerSession = $customerSession;
parent::__construct($context);
}
public function _prepareLayout() {
var_dump($this->_customerSession->getCustomer()->getId());
exit();
return parent::_prepareLayout();
}
$this->session->isLoggedIn()
return true na minha classe controller, mas return false na minha classe block. Por quê?cacheable=false
ver Magento 2 - Obter ID do cliente da sessão em uma classe blocoRespostas:
É cópia de trabalho. Você pode comparar com a sua classe de bloqueio. Aqui eu uso Form como classe de bloco
fonte
$this->customerSession->isLoggedIn()
é falso sempre. Eu faço o mesmo em uma classe de controlador e funciona bem.<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
Você precisa injetar
\Magento\Customer\Model\Session $customerSession,
classe para obter o ID do cliente da sessão do cliente.NOTA : Você só obtém o ID do cliente se o cliente efetuou login e a sessão do cliente foi inicializada
fonte
Quando você define o bloco que usa a sessão, é necessário desativar o cache para ele.
fonte
Parece funcionar quando você passa o objeto Context para a classe pai antes de instanciar a sessão do cliente:
fonte
Enquanto estamos injetando a sessão do cliente no bloco para recuperar os dados do cliente logado e não estamos obtendo os dados do cliente porque o Magento 2 redefine todas as sessões do cliente quando o FPC está ativado.
Use cacheable = "false" para bloick em seu layout:
Nesse caso, o Magento 2 ignora esta página do cache.
fonte
Se você precisar apenas do
customer_id
item sem carregar o objeto inteiro (consulte o métodogetCustomer
method), poderá obtê-lo simplesmente usando ogetCustomerId
métodoComo
getId
método também chamagetCustomerId
método.fonte
Primeiro, crie uma instância no arquivo header.phtml como abaixo e também se houver mais de uma loja disponível e alguém desejar receber e-mails em apenas uma delas.
fonte