THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


- j'ai un module (nom "Sendree") en place sur mon Thelia, qui fonctionne déjà depuis plusieurs mois, qui fait du front et de l'admin.
- d'un autre côté, j'ai développé un début de client qui se connecte au thelia via l'api, et récupère correctement les categories de produits par exemple.

Maintenant, je souhaite rajouter des routes à l'API, connectée au module en question, pour récupérer certaines données spécifiques.
La bottom line c'est que ma requête client reçoit toujours une réponse 404, je n'arrive pas à joindre le controller.

Ce que j'ai fait :
--------------------------------------------
1. lu la documentation http://doc.thelia.net/en/documentation/ … oller.html

--------------------------------------------
2. rajouté une route dans le routing.xml du module :

<?xml version="1.0" encoding="UTF-8" ?>

<routes xmlns="http://symfony.com/schema/routing"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">

    <!-- api controller -->
    <route id="Sendree.api.showroom.get" path="/api/sendree/showroom" methods="get">
        <default key="_controller">Sendree:Sendree\Controller\Api\SendreeApiController:getshowroom</default>
    </route>

    <!--admin controller-->
    [... mes autres routes existantes ...]

--------------------------------------------
3. rajouté le fichier controller associé  :

local/modules/Sendree/Controller/Api/SendreeApiController.php

--------------------------------------------
4. implémenté le début du controller en suivant la doc  :

<?php

namespace Sendree\Controller\Api;

use Thelia\Controller\Api\BaseApiController;
use Thelia\Log\Tlog;

class SendreeApiController extends BaseApiController {

  public function getshowroomAction() {

    Tlog::getInstance()->debug("showroom api");

    $results = array("message" => "ok");
    return JsonResponse::create($results);
  }

}

---------------------------------------------

Mais donc, je n'arrive pas à joindre le controller, je reçois toujours une réponse 404. J'ai tenté plusieurs modifs pour voir, le chemin du controller dans le fichier de routing par exemple, ou encore la convention de nom des méthodes du controller (me suis demandé sur le "Action" à la fin du nom de la méthode avait une signification particulière....).

Est-ce qu'il y aurait un truc évident que j'aurais raté dans l'histoire ?
Merci,
loïc b.

Offline

Offline


et voilà, j'allais justement revenir sur le forum pour indiquer cette réponse :
il faut vider les caches. celle-là, si je pouvais me la tatouer quelque part, parce que franchement, le nombre de fois où ça me fait tourner en rond comme une truite... smile
ça pourrait être utile de l'avoir en note de rappel dans la doc sur l'ajout de route dans l'Api.

Ensuite, il y a les conventions de noms utilisées dans la route:
si la class du controller est SendreeApiController, et que le chemin est [module Sendree]/Controller/Api/SendreeApiController.php,
le <default key="_controller"> de la route est "Sendree:Api\SendreeApi:getshowroom"
et dans la class controller, la méthode déclarée doit être getshowroomAction

Même en lisant la doc, c'est pas archi intuitif. Ou alors c'est une convention connue des dev webs dont je n'ai pas l'habitude. Bref, j'ai un peu lutté, mais ça avance... wink

Last edited by neywen (15-10-2016 16:16:50)

Offline


En mode dev, les caches sont automatiquement invalidés...


OpenStudio Toulouse

Offline


oui ça c'est ok, mais comme je ne bosse que sur l'API là tout de suite, j'ai donné l'url locale à mon client, sans le index_dev.php. du coup ceci explique cela, mais j'arriverais bien à le retenir un jour smile

Last edited by neywen (16-10-2016 00:00:33)