¿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=falsever 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_identonces sin cargar todo el objeto (vea métodogetCustomermétodo) puede obtenerlo simplemente usando elgetCustomerIdmétodo.Como
getIdmétodo también se llamagetCustomerIdmé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