Bagaimana cara mendapatkan ID pelanggan dari sesi? Saya mencoba ini tetapi tidak berhasil.
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()
mengembalikan true di kelas controller saya tetapi return false di kelas blok saya. Mengapa?cacheable=false
lihat Magento 2 - Dapatkan ID pelanggan dari sesi dalam kelas blokJawaban:
Ini copy pekerjaan. Anda dapat membandingkan dengan kelas blok Anda. Di sini saya menggunakan Formulir sebagai kelas blok
sumber
$this->customerSession->isLoggedIn()
itu selalu salah. Saya melakukan hal yang sama di kelas controller dan berfungsi dengan baik.<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
Anda perlu menyuntikkan
\Magento\Customer\Model\Session $customerSession,
kelas untuk mendapatkan ID pelanggan dari sesi pelanggan.CATATAN : Anda hanya mendapatkan id pelanggan jika pelanggan masuk dan sesi pelanggan diinisialisasi
sumber
Ketika Anda menentukan blok yang menggunakan sesi Anda harus menonaktifkan cache untuk itu.
sumber
Tampaknya berfungsi ketika Anda meneruskan objek konteks ke kelas induk sebelum memulai sesi pelanggan:
sumber
Saat kami menyuntikkan sesi pelanggan di blok untuk mengambil kembali data pelanggan yang masuk dan kami tidak mendapatkan data pelanggan dari blok karena Magento 2 mengatur ulang semua sesi pelanggan ketika FPC diaktifkan.
Silakan gunakan cacheable = "false" untuk bloick di layout Anda:
Dalam hal ini, Magento 2 mengabaikan halaman ini dari caching.
sumber
Jika Anda hanya membutuhkan
customer_id
itu tanpa memuat seluruh objek (lihat metodegetCustomer
metode), Anda bisa mendapatkannya hanya dengan menggunakangetCustomerId
metode.Sebagai
getId
metode juga memanggilgetCustomerId
metode.sumber
Pertama, buat instance dalam file header.phtml seperti di bawah ini dan juga jika lebih dari satu toko tersedia dan seseorang ingin mendapatkan email hanya di salah satu toko.
sumber