Wie erhalte ich eine Kunden-ID aus der Sitzung? Ich habe es versucht, aber nicht funktioniert.
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()
in meiner Controller-Klasse true zurückgegeben wird, in meiner Block-Klasse jedoch false. Warum?cacheable=false
siehe Magento 2 - Kunden-ID von Sitzung in einer Blockklasse erhaltenAntworten:
Es ist eine Arbeitskopie. Sie können mit Ihrer Blockklasse vergleichen. Hier benutze ich Form als Blockklasse
quelle
$this->customerSession->isLoggedIn()
ist immer falsch. Ich mache das gleiche in einer Controller-Klasse und es funktioniert gut.<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
Wenn Sie einen Block definieren, der eine Sitzung verwendet, müssen Sie den Cache dafür deaktivieren.
quelle
Sie müssen eine
\Magento\Customer\Model\Session $customerSession,
Klasse injizieren , um die Kunden-ID aus der Kundensitzung zu erhalten.HINWEIS : Sie erhalten die Kunden-ID nur, wenn der Kunde angemeldet und die Kundensitzung initialisiert ist
quelle
Es scheint zu funktionieren, wenn Sie das Context-Objekt an die übergeordnete Klasse übergeben, bevor Sie die Kundensitzung instanziieren:
quelle
Während wir eine Kundensitzung in einen Block einspeisen, um angemeldete Kundendaten abzurufen, erhalten wir keine Kundendaten aus dem Block, da Magento 2 alle Kundensitzungen zurücksetzt, wenn FPC aktiviert ist.
Bitte verwenden Sie cacheable = "false" für Bloick in Ihrem Layout:
In diesem Fall ignoriert Magento 2 das Zwischenspeichern dieser Seite.
quelle
Wenn Sie nur das
customer_id
dann ohne Laden des gesamten Objekts benötigen (siehegetCustomer
Methodenmethode), können Sie es durch einfaches Verwenden dergetCustomerId
Methode erhalten.Als
getId
Methode ruft auchgetCustomerId
Methode auf.quelle
Erstellen Sie zunächst eine Instanz in der Datei header.phtml wie folgt und auch, wenn mehr als ein Geschäft verfügbar ist und Sie nur in einem der Geschäfte E-Mails erhalten möchten.
quelle