J'ai fait un petit update de mon eventlistener
namespace ProductComment\EventListeners;
use ProductComment\Controller\ProductCommentController;
use ProductComment\Model\ProductComment;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Cart\CartCreateEvent;
use Thelia\Core\Event\Cart\CartEvent;
use Thelia\Core\Event\Cart\CartItemEvent;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\HttpFoundation\Request;
use Thelia\Model\CartItem;
/**
* Class ProductCommentInfo
* @package ProductComment\EventListeners
*/
class ProductCommentInfo implements EventSubscriberInterface
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public static function getSubscribedEvents()
{
return [
TheliaEvents::CART_ADD => ['addItem', 255],
TheliaEvents::CART_ADDITEM => ['saveComment', 10],
TheliaEvents::ORDER_BEFORE_PAYMENT => ['saveOrderProductId',10]
];
}
public function saveComment(CartEvent $cartEvent)
{
$comment = $this->request->get('comment');
$cartItemId = $cartEvent->getCart()->getLastCartItemAdded()->getId();
if ($cartItemId != null && $comment != null) {
$productComment = new ProductComment();
$productComment->setCartItemId($cartItemId);
$productComment->setComment($comment);
$productComment->setOrderProductId('')
$productComment->save();
$this->request->getSession()->set('comment', '');
}
}
public function saveOrderProductId(OrderEvent $event) {
$orderProducts = OrderProductQuery::create()->findByOrderId($event->getOrder()->getId());
/** @var OrderProduct $orderProduct */
foreach ($orderProducts as $orderProduct) {
if (null !== $productComment = ProductCommentQuery::create()->findOneByCartItemId($orderProduct->getCartItemId())){
$productComment
->setOrderProductId($orderProduct->getId())
->save();
}
}
}
public function addItem(CartEvent $cartEvent)
{
$comment = $comment = $this->request->get('comment');
$cartItems = $cartEvent->getCart()->getCartItems();
foreach ($cartItems as $cartItem) {
$cartItemId = $cartItem->getId();
$productComments = ProductCommentQuery::create()->findByCartItemId($cartItemId);
foreach ($productComments as $productComment) {
if ($comment != null && $comment != $productComment) {
// Prevent the cart action from adding the item, force it to create a new one instead
$event->setAppend(false);
$event->setNewness(true);
}
}
}
}
}
Cela ne fonctionne pas pour l'enregistrement de mon message lors de l'ajout dans le panier et je n'ai aucun erreur qui s'affiche pour me dire d'où vient le soucis.
Merci