¿Cómo obtener la identificación del cliente de la sesión? Intenté esto pero no funcionó.
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 es verdadero en mi clase de controlador pero return false en mi clase de bloque. ¿Por qué?cacheable=false
ver Magento 2 - Obtener ID de cliente de sesión en una clase de bloqueRespuestas:
Es una copia de trabajo. Puedes comparar con tu clase de bloque. Aquí uso Form como clase de bloque
fuente
$this->customerSession->isLoggedIn()
es falso siempre. Hago lo mismo en una clase de controlador y funciona bien.<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
Debe inyectar la
\Magento\Customer\Model\Session $customerSession,
clase para obtener la identificación del cliente de la sesión del cliente.NOTA : Solo obtendrá la identificación del cliente si el cliente inició sesión y la sesión del cliente se inicializó
fuente
Cuando define el bloque que usa la sesión, debe deshabilitar la memoria caché.
fuente
Parece funcionar cuando pasa el objeto Context a la clase padre antes de crear una instancia de la sesión del cliente:
fuente
Si bien estamos inyectando sesión de cliente en bloque para recuperar datos de cliente registrados y no estamos obteniendo datos de cliente del bloque porque Magento 2 restablece todas las sesiones de cliente cuando FPC está habilitado.
Utilice cacheable = "false" para bloick en su diseño:
En este caso, Magento 2 ignora esta página del almacenamiento en caché.
fuente
Si solo necesita el
customer_id
entonces sin cargar todo el objeto (vea métodogetCustomer
método) puede obtenerlo simplemente usando elgetCustomerId
método.Como
getId
método también se llamagetCustomerId
método.fuente
Primero, cree una instancia en el archivo header.phtml como se muestra a continuación y también si hay más de una tienda disponible y desea recibir correo en solo una de las tiendas.
fuente