THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour à tous,

Je suis en train de dévellopper un module pour intégrer un webservice de normalisation d'adresses postales dans le formulaire de création/modication de l'adresse du client. Ca nous est nécessaire pour bénéficier de tarifs postaux avantageux (une part de nos produits sont envoyés directement par la poste).

Là où j'en suis, j'ai créé un event listener sur les évenements BEFORE_CREATEADDRESS et BEFORE_UPDATEADDRESS qui appelle le Webservice et modifie l'addresse renvoyée par AddressEvent->getAddress  à sauvegarder en fonction de ce que renvoie le webservice. Ca fonctionne à peu près bien, mais je me pose des questions sur la gestion des erreurs.

Quand le Web-service ne reconnait pas l'addresse postale, je lance une FormValidationException avec le message d'erreur, ce qui donne à peu près les informations pertinentes au client pour la corriger, mais je ne réussis pas à ce que le contenu des champs du formulaire soit mis à jour à partir des résultat du webservice. Est-ce qu'il y a une fonction de la class Address d'utilisable pour cela ou est-ce qu'il faut utiliser une autre approche ?

Merci d'avance !

Offline


Tu peux peut-être utiliser les FormEvents de Symfony pour manipuler les données de ton formulaire ( https://symfony.com/doc/2.8/form/events.html ), et placer les données issues du webservice dans les champs, sans doute au prix d'un second appel à ton web services.


OpenStudio Toulouse

Offline


Merci pour le conseil.

En revanche, le Web-service étant payant. C'est assez important de minimiser les appels.

Il y a sans doute moyen de stocker ses résultats quelque part dans l'event listener, et les récupérer dans le form event, non ?


Donc, si je comprends bien, il s'agirait d'ajouter un listener sur l'événement FormEvents::PRE_SET_DATA, des formulaires thelia.front.address.create et thelia.front.address.update. Ca s'ajoute de la même manière que les listener sur les événements Thelia ? Avec un tag dans la section services du config.xml ?