Как получить идентификатор клиента из сессии? Я пытался это, но не работает.
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()
возвращают true в моем классе контроллера, но возвращают false в моем классе блока. Почему?cacheable=false
см. Magento 2 - Получить идентификатор клиента из сеанса в классе блокаОтветы:
Это рабочая копия. Вы можете сравнить с вашим классом блока. Здесь я использую форму как класс блока
источник
$this->customerSession->isLoggedIn()
всегда ложно. Я делаю то же самое в классе контроллера, и он работает нормально.<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
Вам нужно ввести
\Magento\Customer\Model\Session $customerSession,
класс, чтобы получить идентификатор клиента из сеанса клиента.ПРИМЕЧАНИЕ . Идентификатор клиента вы получаете только в том случае, если клиент вошел в систему и инициализировал сеанс клиента.
источник
Когда вы определяете блок, который использует сессию, вы должны отключить кеш для него.
источник
Кажется, это работает, когда вы передаете объект Context родительскому классу перед созданием сеанса клиента:
источник
Пока мы вводим сеанс клиента в блок для извлечения зарегистрированных данных клиента, и мы не получаем данные клиента из блока, потому что Magento 2 сбрасывает все сеансы клиента, когда FPC включен.
Пожалуйста, используйте cacheable = "false" для bloick в вашем макете:
В этом случае Magento 2 игнорирует эту страницу из-за кеширования.
источник
Если вам нужен только
customer_id
тогда без загрузки всего объекта (см. МетодgetCustomer
метода), вы можете получить его, просто используяgetCustomerId
метод.Как
getId
метод также вызываетgetCustomerId
метод.источник
Сначала создайте экземпляр в файле header.phtml, как показано ниже, а также, если доступно более одного хранилища и кто-то хочет получать почту только в одном из хранилищ.
источник