2012-11-29 7 views
6

J'utilise Silex framework pour moquer le serveur REST. J'ai besoin de créer un uri pour la méthode OPTIONS http, mais la classe Application ne propose que des méthodes pour PUT, GET, POST et DELETE. Est-il possible d'ajouter et d'utiliser une méthode http personnalisée?Silex - Méthode OPTIONS

Répondre

4

J'ai fait la même chose mais je ne me souviens pas très bien comment j'ai réussi à le faire fonctionner. Je ne peux pas l'essayer maintenant. Pour que vous devez étendre le ControllerCollection:

class MyControllerCollection extends ControllerCollection 
{ 
    /** 
    * Maps an OPTIONS request to a callable. 
    * 
    * @param string $pattern Matched route pattern 
    * @param mixed $to  Callback that returns the response when matched 
    * 
    * @return Controller 
    */ 
    public function options($pattern, $to) 
    { 
     return $this->match($pattern, $to)->method('OPTIONS'); 
    } 
} 

Et puis utilisez dans votre commande Application classe:

class MyApplication extends Application 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     $app = $this; 

     $this['controllers_factory'] = function() use ($app) { 
      return new MyControllerCollection($app['route_factory']); 
     }; 
    } 

    /** 
    * Maps an OPTIONS request to a callable. 
    * 
    * @param string $pattern Matched route pattern 
    * @param mixed $to  Callback that returns the response when matched 
    * 
    * @return Controller 
    */ 
    public function options($pattern, $to) 
    { 
     return $this['controllers']->options($pattern, $to); 
    } 
} 
+0

Super, vraiment facile, merci! –

+0

@PeterKrejci a-t-il fonctionné? Je ne peux pas le tester ... – gremo

+0

Oui, sans aucun problème. –

3

Comme cette question se heurte encore très classé dans les recherches Google, je ll noter que maintenant qu'il est quelques années plus tard, Silex a ajouté une méthode de gestionnaire pour OPTIONS

http://silex.sensiolabs.org/doc/usage.html#other-methods

La liste actuelle des verbes qui peuvent être utilisés comme appels de fonction directement sont: get, post, put, delete, patch, options. Donc:

$app->options('/blog/{id}', function($id) { 
    // ... 
}); 

Cela devrait fonctionner correctement.