M2 全页面缓存下获取customer group id

管理员组 admin 2月前 75

在线上开启全页面缓存后,导致根据Customer session获取GroupId会失效。

应该这样来获取

<?php 
use Magento\Customer\Model\Context;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    public function getCustomerGroup() {
        $currentGroupId = 0;
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $httpContext =  $objectManager->get('\Magento\Framework\App\Http\Context');
        if($httpContext->getValue(Context::CONTEXT_AUTH)){
            $currentGroupId = $httpContext->getValue(Context::CONTEXT_GROUP);
        }
        if(!$currentGroupId){
            $customerSession = $objectManager->get('\Magento\Customer\Model\Session');
            if ($customerSession->isLoggedIn()) {
               $currentGroupId = $customerSession->getCustomer()->getGroupId();
            }
        }
        $customerGroup = $objectManager->get('\Magento\Customer\Model\Group');
        $group = $customerGroup->load($currentGroupId);
        return $group;
    }
}
?>


也就是说在

Magento\Customer\Model\App\Action\ContextPlugin

类里。m2默认就已经给我们准备了group id。

因为他们也发现了这个问题,以后扩展的话也方便,直接重写这个ContextPlugin就行了。



最新回复 (0)
返回
发帖