You can set it by Magento 2 configuration :
Store -> Configuration -> Catalog -> Inventory -> Product Stock
Options -> Maximum Qty Allowed in Shopping Cart
Step 1 -
Create events.xml :
<event name="controller_action_predispatch_checkout_cart_add">
<observer name="vendor_model_cart_add_before" instance="Vendor\Module\Observer\CartAddBefore" />
</event>
Step 2 -
Create CartAddBefore.php :
<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\App\ObjectManager;
class CartAddBefore implements ObserverInterface {
protected $_cart;
protected $_messageManager;
protected $_request;
public function __construct(
\Magento\Checkout\Model\Cart $cart,
\Magento\Framework\Message\ManagerInterface $messageManager,
\Magento\Framework\App\RequestInterface $request,
) {
$this->_cart = $cart;
$this->_messageManager = $messageManager;
$this->_request = $request;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$postValues = $this->_request->getPostValue();
$cartItemsCount = $this->_cart->getQuote()->getItemsCount();
if($cartItemsCount > 1)
{
...... your logic .......
$this->_messageManager->addError(__('Sorry, Only 1 product is allowed'));
}
}
}