Bonjour à tous,

j'ai un site donc je développe présentement une API pour permettre à mes utilisateurs d'utiliser mon service via leur site web.

Le système est en place mais maintenant il me reste à gérer les routes car j'aimerais conserver la même forme de lien de mes versions précédente.
Ex: http://monsite.ext/api/?url=http://unsite.ext&api=gdsDFG4DFTGhds56456DFgdvjhjy.

Dans mon controller j'ai créer une function api() et à l'intérieur j'analyse les variable $_GET définit.
Ma route ressemble à ceci : Router::connect('/api/', array('controller' => 'urls', 'action' => 'api'));.

Tout semblais être correct jusqu'à ce que j'entre un url complet avec le http:// , effectivement cake n'aime pas qu'ont lui passe le symbole suivant :// car il émet un erreur missing argument à cause du : dans l'url.

Quelqu'un aurais une idée pour contourner ce problème ?

10 réponses


Salut,

J'ai aussi creer une api exactement comme tu l'as fait (router + variables) mais pour récupérer les variables poster en GET, je fais sa :

$this->request->query'url'];
$this->request->query'api'];

Avec se code, tout marche nickel. Essaye et dis moi.

zkiller
Auteur

Je pense que tu a mal compris mon problème,

mes variable fonctionne bien. Ce qui fonctionne pas ces que cake n'aime pas recevoir une url contenant http:// car le symbole : ( double-point ) et utiliser par les route pour les argument du coup cake cherche un argument vide et sa émet une erreur : Missing Argument.

j'ai tenté de créer un fichier route spécial pour ce controller mais je suis un peu perdus.

Non, je crois que c'est toi qui ne m'a pas compris. J'ai déjà fais une api utilisant des url en paramètre. Et je n'ai aucune erreur en utilisant le code que je t'ai donnée ci-dessus.
As-tu au moins essayé?

zkiller
Auteur

ca ne fonctionne pas, cake émet une erreur via le dispatcher et router donc avant d'atteindre mon controller.

Hum tres étrange...Je vais jeter un oeil sur le boulot que j'avais fais, et je reviens vers toi. J'ai peut être du oublier de te preciser un ou deux truc, qui sait.
Sous quelle version de Cake es-tu? Peux-tu nous montrer exactement l'erreur qu'il te renvoi?

Ok c'est bon, je viens de voir d'ou pouvait venir ton erreur. En fait, pour utiliser ce que j'ai mis plus haut, et plus généralement, des paramètres de types $_GET, tu dois avoir une methode sans argument en paramètre :

public function api(){
    $this->request->query'url'];
    $this->request->query'api'];
}

Je pense qu'a la base, tu avais fait quelque chose comme sa :

public function api($url, $api){
    // code
}

En faisant sa, Cake s'attend a avoir une url de type :

/api/url/api

d'ou le missing arguments

Test et dis moi, avec sa, sa devrait tourner nickel.

zkiller
Auteur

ma méthode est la même que ta première.

public function api(){
    $this->request->query'url'];
    $this->request->query'api'];
}

Tout fonctionne sauf quand il y a les symbole suivant :// du http://

Hello,

Essai dans ta route de spécifier ce que doit contenir t'es variables, avec une expression régulière.
Donc le format de la variable url et api.

Sinon, envoi ton url en remplacant: :// par %3A%2F%2F

@+

zkiller
Auteur

Les regex ne change rien au problème.

Sinon, envoi ton url en remplacant: :// par %3A%2F%2F

comme ces un api ou mes utilisateur entre l'adresse d'un site web je n'ai pas le Control sur comment il vont envoyer l'url.

Sinon je pense faire un fichier a la main avec de l'url rewriting.

Peux-tu nous donner le code de ton Router et de ton controller? Sous quelle version de Cake tournes-tu actuellement?