2012-11-29 9 views
6

Ich benutze Silex framework für Mocking REST-Server. Ich muss uri für OPTIONS http Methode erstellen, aber Application Klasse bietet nur Methoden für PUT, GET, POST und DELETE. Ist es möglich, eine benutzerdefinierte HTTP-Methode hinzuzufügen und zu verwenden?Silex - OPTIONS Methode

Antwort

4

Ich habe das gleiche gemacht, aber ich kann mich nicht gut daran erinnern, wie ich es geschafft habe, es zum Laufen zu bringen. Ich kann es jetzt nicht versuchen. Sicherlich müssen Sie die ControllerCollection erweitern:

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'); 
    } 
} 

Und dann in Ihrem benutzerdefinierten verwenden es Application Klasse:

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

Großartig, wirklich einfach, danke! –

+0

@PeterKrejci hat es funktioniert? Ich kann es nicht testen ... – gremo

+0

Ja, ohne jedes Problem. –

3

Da diese Frage immer noch hoch bewertet in Google-Suchanfragen kommt, ich ll beachten sie, dass jetzt, dass es einige Jahre später ist, hinzugefügt Silex eine Behandlungsmethode für OPTIONS

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

Die aktuelle Liste der Verben, die direkt als Funktionsaufrufe verwendet werden können, sind: get, post, put, delete, patch, options. Also:

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

Sollte gut funktionieren.