THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Module webservice[Résolu]

(09-12-2015 14:21:16)


Bonjour,
je souhaite créer un module qui me permettrais au niveau du Backoffice de mettre à jour les fournisseur et marque, pour cela il faut que je mette en place un lien avec un webservice qui me retourne du Json.
Je voudrais définir dans le fichier config de mon module les accès au webservice en question mais j'avoues ne pas savoir comment exploiter les données qui sont dans ce fichier config.xml, pouvez-vous svp m'indiquer la procédure car dans la doc je ne trouve pas.

Je souhaiterais accéder au données du xml par exemple si je définit un id de connexion ainsi qu'une url, comment exploiter cela dans le controller ou model.
J'ai vu qu'il y avait aussi la possibilité de configurer un import dans ce fichier pour par exemple remplir la base "marque et fournisseur" mais je ne vois pas trop comment m'y prendre par rapport à la doc qui donne en exemple que les catégories et produit.


Merci par avance pour votre aide.

Last edited by Shiness (10-12-2015 14:45:30)

Offline


Pour créer un Web Service avec une réponse JSON dans Thelia 2, il te faut tout d'abord créer un module (ex. MonModule). Dans ce module crée un contrôleur (ex. MonControleur), et dans ce contrôleur une méthode (ex. maMethode), qui va implémenter les fonctions de ton web service, et retournera une instance de ResponseJSON()

Déclare ensuite une route dans ton fichier routing.xml vers cette méthode :

    <route id="monmodule.id_de_la_route" path="/monmodule/monservice" methods="post">
        <default key="_controller">MonModule\Controller\MonControleur::maMethode</default>
    </route>

Pour invoquer ton web service, il te suffit d'invoquer l'URL http://www.tonsite.com/monmodule/monservice

Tu as des exemples de tout ceci dans divers modules, dont le module Front.

Pour les marques (brands), tu peux aussi utiliser les services brand et product  l'API Thelia standard : http://doc.thelia.net/en/documentation/ … oduct.html


OpenStudio Toulouse

Offline


Merci pour ta réponse,

je me suis mal exprimé désolé en faite je veux créer un module qui dialogue avec un webservice existant qui me renvoi une liste avec la marque des produits et ensuite avec ces infos je dois peupler la base de données "brand", voici un exemple de la réponse après mise en forme du json reçu:

stdClass Object
(
    [data] => stdClass Object
        (
            [array] => Array
                (
                    [0] => stdClass Object
                        (
                            [brandId] => 306
                            [brandLogoID] => 1233970
                            [brandName] => USN
                        )

                    [1] => stdClass Object
                        (
                            [brandId] => 313
                            [brandLogoID] => 3132662
                            [brandName] => FRIGAIR
                        )

                    [2] => stdClass Object
                        (
                            [brandId] => 4600
                            [brandLogoID] => 1026583
                            [brandName] => LYNXauto
                        )

                    [3] => stdClass Object
                        (
                            [brandId] => 4673
                            [brandLogoID] => 1006528
                            [brandName] => VPM
                        )

                    [4] => stdClass Object
                        (
                            [brandId] => 298
                            [brandLogoID] => 2905660
                            [brandName] => ASSO
                        )
.... etc

Je souhaitais donc mettre les infos de connexion (id client, mdp, et url) à ce webservice dans config.xml pour ensuite les utiliser dans mon controller pour que cela soit propre mais je ne sais pas comment récupérer ces infos quand elle sont dans config.xml, sinon je peux mettre ces infos directement dans le controller mais c'était pour rester cohérent par rapport à la strucutre du module (ou peut être que je me trompe ?).

Merci beaucoup en tout cas pour ta reactivité roadster c'est cool smile .

Last edited by Shiness (09-12-2015 15:00:40)

Offline


Ha OK. Dans ce cas, tu peux définir id client, mdp, et url comme des paramètres, et les passer au constructeur d'un service dans config.xml. Par exemple, ici implémenté comme un event listener :

    <parameters>
        <parameter key="monmodule.client">le login</parameter>
        <parameter key="monmodule.mdp">le password</parameter>
        <parameter key="monmodule.url">url de ton service</parameter>
    </parameters>

    <service id="monmodule.monservice" class="MonModule\EventListeners\MonService">
        <argument>%monmodule.client%</argument>
        <argument>%monmodule.mdp%</argument>
        <argument>%monmodule.url%</argument>
        <tag name="kernel.event_subscriber"/>
    </service>

Et ton service ressemble à :

class MonService implements EventSubscriberInterface
{
    public function __construct($login, $mdp, $url) {
      ...
    } 
    ...
}

OpenStudio Toulouse

Offline


Parfait merci beaucoup c'est exactement ça ! smile
je vais tester tout ça pour ensuite insert les données automatiquement dans la base de données et mettre à jour quand il y a des nouvelles marques.

Merci pour ton temps smile.

Offline


Bonjour,

Pour ceux qui veulent définir des paramètres dans le fichier config de leur module et ensuite les récupérer tout simplement dans le Controller voici le code:
config.xml:

<parameters>
<parameter key="tecdocbdd.client">le login</parameter>
<parameter key="tecdocbdd.mdp">le password</parameter>
<parameter key="tecdocbdd.url">url de ton service</parameter>
</parameters>

et ensuite dans le Controller du Module:

<?php
/**
 * Created by PhpStorm.
 * User: AS DEV
 * Date: 2015-12-10
 * Time: 10:44
 */
namespace Tecdocbdd\Controller\BackOffice;

use Thelia\Controller\Admin\BaseAdminController;

class TecdocController extends BaseAdminController
{

    public function getClient()
    {
        $client = $this->container->getParameter('tecdocbdd.client');
    }

}

Last edited by Shiness (10-12-2015 12:28:41)