Comment obtenir l'ID client de la session? J'ai essayé cela mais ne fonctionne pas.
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()
retour vrai dans ma classe de contrôleur mais retourne faux dans ma classe de bloc. Pourquoi?cacheable=false
voir Magento 2 - Obtenir l'ID client de la session dans une classe de blocRéponses:
C'est une copie de travail. Vous pouvez comparer avec votre classe de blocs. Ici, j'utilise Form comme classe de bloc
la source
$this->customerSession->isLoggedIn()
c'est toujours faux. Je fais de même dans une classe de contrôleur et cela fonctionne très bien.<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
Vous devez injecter une
\Magento\Customer\Model\Session $customerSession,
classe pour obtenir l'ID client de la session client.REMARQUE : vous n'obtenez l'ID client que si le client est connecté et que la session client est initialisée
la source
Lorsque vous définissez un bloc qui utilise la session, vous devez désactiver le cache pour cela.
la source
Cela semble fonctionner lorsque vous passez l'objet Context à la classe parent avant d'instancier la session client:
la source
Pendant que nous injectons la session client dans le bloc pour récupérer les données client connectées et que nous n'obtenons pas les données client du bloc parce que Magento 2 réinitialise toutes les sessions client lorsque FPC est activé.
Veuillez utiliser cacheable = "false" pour bloick dans votre mise en page:
Dans ce cas, Magento 2 ignore cette page de la mise en cache.
la source
Si vous n'avez besoin que de l'
customer_id
objet sans charger l'intégralité de l'objet (voirgetCustomer
méthode), vous pouvez l'obtenir en utilisant simplementgetCustomerId
method.Comme
getId
méthode appelle égalementgetCustomerId
méthode.la source
Tout d'abord, créez une instance dans le fichier header.phtml comme ci-dessous et aussi si plusieurs magasins sont disponibles et que vous voulez recevoir du courrier dans un seul des magasins.
la source