Como Limpar/Esvaziar o Carrinho no Magento 2 programaticamente
Bem, é possível limpar o carrinho usando três maneiras diferentes, mencionadas abaixo. Trabalhando com o Magento várias vezes você se deparou com essa situação por isso pensamos em criar um artigo no blog Magecomp.
Primeira Forma
namespace Vendor\Extension\Controller\Index;
use Magento\Checkout\Model\Cart;
use Magento\Checkout\Model\Session as CheckoutSession;
use Magento\Framework\App\Action\Action;
class Clearcart extends Action
{
protected $_modelCart;
protected $ checkoutSession;
public function __construct(CheckoutSession $checkoutSession,Cart $modelCart)
{
$this->checkoutSession = $checkoutSession;
$this->_modelCart = $modelCart;
}
public function execute()
{
$cart = $this->_modelCart;
$quoteItems = $this->checkoutSession->getQuote()->getItemsCollection();
foreach($quoteItems as $item)
{
$cart->removeItem($item->getId())->save();
}
}
}
Segunda Forma
Nesse método, podemos obter o carrinho atual usando o objeto model cart e, em seguida, simplesmente truncá-lo.
namespace Vendor\Extension\Controller\Index;
class Clearcart extends Action
{
public function execute()
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cartObject = $objectManager->create('Magento\Checkout\Model\Cart')->truncate();
$cartObject->saveQuote();
}
}
Terceiro Método
Neste último método, podemos excluir o item do carrinho Modal usando o código abaixo.
namespace Vendor\Extension\Controller\Index;
use Magento\Checkout\Model\Session as CheckoutSession;
use Magento\Quote\Model\Quote\Item
class Clearcart extends Action
{
protected $modelCartItem;
protected $checkoutSession;
public function __construct(CheckoutSession $checkoutSession,Item $modelCartItem)
{
$this->checkoutSession = $checkoutSession;
$this->_ modelCartItem = $modelCartItem;
}
public function execute()
{
$checkoutSession = $this->getCheckoutSession();
$allItems = $checkoutSession->getQuote()->getAllVisibleItems();
foreach ($allItems as $item)
{
$cartItemId = $item->getItemId();
$itemObj=$this->getItemModel()->load($cartItemId);
$itemObj->delete();
}
}
}