THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour, je suis en train de crée un module qui permet au X premiers utilisateurs qui remplissent certaines conditions de commander un produit. Les autres sont mis en file d'attente en attendant.
Pour cela j'ai crée une table ou j'enregistre l'id du panier et l'id du client une fois que celui ci à ajouter son produit au panier.

Dans mon eventListeners la ligne suivante pose problème : TheliaEvents::CART_ITEM_CREATE_BEFORE => array("addListeAttente", 300), je peux ajouter aucun produit dans le panier tant qu'elle n'est pas commenté. Je pense pas que l'erreur vienne de ma fonction vu qu'elle est vide pour le moment.

Je ne vois pas d'erreur dans les logs concernant mon eventListener. Je n'ai pas l'impression qu'il y ai d'erreur dans la structure, j'ai utilisé la même dans un autre module. Si quelqu'un à une idée.

Merci



<?php

namespace ListeAttente\EventListeners;

use ListeAttente\Model\ListeAttente;
use ListeAttente\Model\ListeAttenteQuery;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Customer\CustomerEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\TheliaFormEvent;
use Thelia\Core\HttpFoundation\Request;
class ListeAttenteEventListener implements EventSubscriberInterface
{
    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public static function getSubscribedEvents()
    {

        return array(
            TheliaEvents::CART_ITEM_CREATE_BEFORE => array("addListeAttente", 300)

        );
    }


    /**
     * Ajoute un utilisateur dans la liste d'attente après avoir ajouter le produit au panier
     *
     * @param CartEvent $cartEvent
     */
    public function addListeAttente(CartEvent $cartEvent)
    {
            echo "plop panier"
    }

}

Last edited by katsuya (19-04-2019 16:53:11)

Offline


Erreur 500, il manque un ";" après  echo "plop panier"

Regarde le résultats de la requête Ajax d'ajout au panier dans le navigateur, et travaille en mode développement, tu verras tes erreurs.


OpenStudio Toulouse

Offline


Merci pour ta réponse.

Dans mon code il y est, j'ai juste un peu trop supprimer en enlevant le contenue de ma fonction qui est en commentaire.

Effectivement il y à bien une erreur 500 lorsque j'ajoute le produit au panier dans le résultat de ma requête Ajax.

Le problème viendrait de mon constructeur mais je ne vois pas pourquoi :

FatalThrowableError in ListeAttenteEventListener.php line 33:\n Type error: Argument 1 passed to ListeAttente\\EventListeners\\ListeAttenteEventListener::__construct() must be an instance of Thelia\\Core\\HttpFoundation\\Request, instance of Symfony\\Component\\HttpFoundation\\RequestStack given, called in /data/share/vhosts/www/cache/dev/CoreDevDebugProjectContainer.php on line 1468

Offline


Dans le config.xml de ton module, tu passes le service "request_stack" (de type RequestStack) au lieu de passer le service "request" (de type Request).


OpenStudio Toulouse

Offline


Effectivement cela fonctionne mieux.
J'avais vu sur un autre post qu'on devait plutôt utiliser RequestStack plutot que Request.

Par contre je n'arrive pas à exécuter mon Event lorsque j'ajoute un produit au panier.
J'ai ajouté les events suivants en me disant que je n'avais peut être pas utilisé le bon :

            TheliaEvents::CART_ADDITEM => array("addListeAttente", 300),
            TheliaEvents::AFTER_CARTADDITEM => array("addListeAttente", 300),
            TheliaEvents::CART_UPDATEITEM => array("addListeAttente", 300),
            TheliaEvents::CART_ITEM_CREATE_BEFORE => array("addListeAttente", 300),
            TheliaEvents::CART_ITEM_UPDATE_BEFORE => array("addListeAttente", 300),

Mais aucun d'eux ne déclenche ma fonction addListeAttente. Me suis je trompé dans l'event à utilisé ?

Merci

Offline


TheliaEvents::CART_ADDITEM c'est suffisant.

Mais si tu veux que ta méthode soit appelée après la mise au panier par Thelia, donne lui une priorité < 128. Là tu as mis 300, et ta méthode est appelée avant celle du core Thelia.

Sache aussi que ton echo "plop" ne sera pas affiché en mode prod, mais seulement en mode dev. Du coup, tu crois peut-être à tort que la méthode n'est pas appelée...


OpenStudio Toulouse

Offline


Bonjour,
j'ai testé avec la valeur à 100 et j'ai vidé le cache mais je vois aucune modification.
Je suis déja en mode dev. J'ai même essayer d’exécuter une requête en dur directement dans la fonction pour voir si c'était juste l'echo qui ne s'affichait pas.
Mais la requête ne s’exécute pas.

Offline


Utilise un debugger.

Un développeur sans débugger est aveugle.


OpenStudio Toulouse