IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Création d'un REST API avec silex pour une interface Backbone.js


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut Création d'un REST API avec silex pour une interface Backbone.js
    Bonjour à tous,

    je souhaiterais réaliser un REST API avec silex pour une interface backbone.js
    Seulement j'ai beaucoup de mal à réaliser ça sur silex.

    J'ai suivis ce tutoriel plutôt bien expliqué : http://cambridgesoftware.co.uk/blog/...work-%20-mysql

    Seulement impossible de le faire marcher

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    require_once __DIR__.'/../../vendor/autoload.php';
     
    $app = new Silex\Application(); 
    $app['debug'] = true;
     
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Silex\Provider\MonologServiceProvider;
     
    $app->register(new Silex\Provider\DoctrineServiceProvider(), array(
        'db.options' => array(
            'driver'   => 'pdo_mysql',
    		'dbhost'	=> 'localhost',
            'dbname'	=> 'todo',
    		'user'	=> 'root',
    		'password' => ''
        ),
    ));
     
    //GET	/{resource}/{id}	Show
    $app->get('/todos/{id}', function ($id) use ($app) {
      $sql = "SELECT * FROM todo WHERE id = ?";
      $post = $app['db']->fetchAssoc($sql, array((int) $id));
      return new Response(json_encode($post), 200, array('Content-Type' => 'application/json'));
    });
     
    //POST	/{resource}		Create
    $app->post('/todos', function (Request $request) use ($app) {
      $data = json_decode($request->getContent());
      $todo = $app['db']->insert('todo', array('content' => $data->title));
      return new Response(json_encode($data), 200, array('Content-Type' => 'application/json'));
    });
     
    //PUT	/{resource}/{id}	Update
    $app->put('/todos/{id}', function ($id, Request $request) use ($app) {
      $data = json_decode($request->getContent());
      $todo = $app['db']->update('todo',$data,array('id' => $id));
      return new Response('Todo updated', 200);
    });
     
    //DELETE	/{resource}/{id}	Destroy
    $app->delete('/todos/{id}', function ($id) use ($app) {
      $todo = $app['db']->delete('todo', array('id' => $id)); 
      return new Response('Todo deleted', 200);
    });
     
    $app->run();
    J'ai l'erreur suivante quand je fais un GET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No route found for "GET /todos": Method Not Allowed (Allow: POST
    La requête POST marche nikel

    La requête PUT m'ajoute 2x la transformation dans la bde, j'imagine donc qu'elle exécute une requête POST 2x ?

    Et la requête DELETE ne marche pas...

    J'ai retourné le problème dans tous les sens et je ne vois vraiment pas ce qui ne vas pas... Des avis

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No route found for "GET /todos": Method Not Allowed (Allow: POST)
    => Tu as défini en GET l'URL "/todos/{id}"
    => Tu lui demandes de te trouver l'URL "/todos" en GET
    => Il te réponds en toute logique qu'il ne connaît pas de méthode en GET correspondant à l'URL "/todos", et comme il est sympas, il te précise que l'URL que tu souhaites existe en POST


    Ta méthode PUT me semble correcte, vu le problème que tu cites au-dessus, il me semble que tu t'es emmêlé les pinceaux quelque part avec Backbone, et que les méthodes ne sont pas appelées au bon moment.
    Un bon moyen de debuguer, c'est d'utiliser la console de Firefox/Chrome pour analyser les requètes Ajax, et tu verras en détails ce que Backbone envoie, à quelle URL, et ce que le serveur renvoie.
    En parallèle, tu peux installer Monolog, ce qui te permettras d'avoir des fichiers de logs.

    Have fun !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    Merci, oui je m'étais pas assez servi de la console javascript au final pour débugger tout ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PayPal] REST API avec PayPal
    Par Jolt0x dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 29/07/2013, 16h40
  2. Création d'un contrôle Winform avec Delphi pour .NET
    Par Nono40 dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 13/02/2013, 20h11
  3. [2.x] besoin d information sur Rest API avec symfony2
    Par ESTYOUNES2008 dans le forum Symfony
    Réponses: 0
    Dernier message: 18/03/2012, 16h08
  4. Quels API's utiliser pour une application en rapport avec Autocad?
    Par Angelsoul dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 31/07/2008, 15h21
  5. Réponses: 3
    Dernier message: 16/01/2008, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo