I've made a module with the help of this thread that adds a product to the cart from a URL. However, the redirect at the end is a simple redirect and so ignores my store that I've got set in the URL.
For example, if I add to cart with the URL /en/addtobasket/product?id=101, it currently redirects to /checkout/cart/, but it should redirect to /en/checkout/cart/.
What code do I need instead of $this->getResponse()->setRedirect('/checkout/cart/') to redirect to the current store's cart URL?
Full module code is here:
<?php namespace Orbitsound\addtobasket\Controller\Product; class Index extends \Magento\Framework\App\Action\Action { /** * @var \Magento\Checkout\Model\Cart */ protected $cart; /** * @var \Magento\Catalog\Model\Product */ protected $product; public function __construct( \Magento\Framework\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory, \Magento\Catalog\Model\Product $product, \Magento\Checkout\Model\Cart $cart ) { $this->resultPageFactory = $resultPageFactory; $this->cart = $cart; $this->product = $product; parent::__construct($context); } public function execute() { try { $params = array(); $params['qty'] = '1';//product quantity /* Get product id from a URL like /addtobasket/product?id=1,2,3 */ $pIds = explode(',',$_GET['id']); foreach($pIds as $value) { $_product = $this->product->load($value); if ($_product) { $this->cart->addProduct($_product, $params); $this->cart->save(); } } $this->messageManager->addSuccess(__('Add to cart successfully.')); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addException( $e, __('%1', $e->getMessage()) ); } catch (\Exception $e) { $this->messageManager->addException($e, __('error.')); } /*Redirect to cart page*/ $this->getResponse()->setRedirect('/checkout/cart/'); } }
Apologies, this must have been answered a million times before, but I can't seem to find a simple answer to my question.
Solved! Go to Solution.
I just managed to figure it out, I don't know if it's the most efficient way, but it works. I added the below in various places:
protected $_storeManager;
\Magento\Store\Model\StoreManagerInterface $storeManager
$this->_storeManager = $storeManager;
$store = $this->_storeManager->getStore(); $this->getResponse()->setRedirect('/' . $store->getCode() . '/checkout/cart/');
Which resulted in my end code:
<?php namespace Orbitsound\addtobasket\Controller\Product; class Index extends \Magento\Framework\App\Action\Action { /** * @var \Magento\Checkout\Model\Cart */ protected $cart; /** * @var \Magento\Catalog\Model\Product */ protected $product; protected $_storeManager; public function __construct( \Magento\Framework\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory, \Magento\Catalog\Model\Product $product, \Magento\Checkout\Model\Cart $cart, \Magento\Store\Model\StoreManagerInterface $storeManager ) { $this->resultPageFactory = $resultPageFactory; $this->cart = $cart; $this->product = $product; $this->_storeManager = $storeManager; parent::__construct($context); } public function execute() { try { $params = array(); $params['qty'] = '1';//product quantity /* Get product id from a URL like /addtobasket/product?id=1,2,3 */ $pIds = explode(',',$_GET['id']); foreach($pIds as $value) { $_product = $this->product->load($value); if ($_product) { $this->cart->addProduct($_product, $params); $this->cart->save(); } } $this->messageManager->addSuccess(__('Add to cart successfully.')); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addException( $e, __('%1', $e->getMessage()) ); } catch (\Exception $e) { $this->messageManager->addException($e, __('error.')); } /*Redirect to cart page*/ $store = $this->_storeManager->getStore(); $this->getResponse()->setRedirect('/' . $store->getCode() . '/checkout/cart/'); } }
Any idea guys? :/
I just managed to figure it out, I don't know if it's the most efficient way, but it works. I added the below in various places:
protected $_storeManager;
\Magento\Store\Model\StoreManagerInterface $storeManager
$this->_storeManager = $storeManager;
$store = $this->_storeManager->getStore(); $this->getResponse()->setRedirect('/' . $store->getCode() . '/checkout/cart/');
Which resulted in my end code:
<?php namespace Orbitsound\addtobasket\Controller\Product; class Index extends \Magento\Framework\App\Action\Action { /** * @var \Magento\Checkout\Model\Cart */ protected $cart; /** * @var \Magento\Catalog\Model\Product */ protected $product; protected $_storeManager; public function __construct( \Magento\Framework\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory, \Magento\Catalog\Model\Product $product, \Magento\Checkout\Model\Cart $cart, \Magento\Store\Model\StoreManagerInterface $storeManager ) { $this->resultPageFactory = $resultPageFactory; $this->cart = $cart; $this->product = $product; $this->_storeManager = $storeManager; parent::__construct($context); } public function execute() { try { $params = array(); $params['qty'] = '1';//product quantity /* Get product id from a URL like /addtobasket/product?id=1,2,3 */ $pIds = explode(',',$_GET['id']); foreach($pIds as $value) { $_product = $this->product->load($value); if ($_product) { $this->cart->addProduct($_product, $params); $this->cart->save(); } } $this->messageManager->addSuccess(__('Add to cart successfully.')); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addException( $e, __('%1', $e->getMessage()) ); } catch (\Exception $e) { $this->messageManager->addException($e, __('error.')); } /*Redirect to cart page*/ $store = $this->_storeManager->getStore(); $this->getResponse()->setRedirect('/' . $store->getCode() . '/checkout/cart/'); } }