2012-11-29 15 views
6

Sto usando Silex framework per il server REST. Devo creare uri per il metodo http OPTIONS, ma la classe Application offre solo metodi per PUT, GET, POST e DELETE. È possibile aggiungere e utilizzare un metodo http personalizzato?Silex - metodo OPZIONI

risposta

4

Ho fatto la stessa cosa ma non riesco a ricordare molto bene come sono riuscito a farlo funzionare. Non posso provarlo adesso. Di sicuro è necessario estendere la 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'); 
    } 
} 

E poi utilizzarlo nella vostra abitudine 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

Ottimo, davvero facile, grazie! –

+0

@PeterKrejci ha funzionato? Non riesco a testarlo ... – gremo

+0

Sì, senza alcun problema. –

3

Dal momento che questa domanda viene ancora in piedi altamente classificato nelle ricerche di Google, Sono ll notare che ora che è diversi anni più tardi, Silex aggiunto un metodo di gestore per OPTIONS

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

L'attuale elenco dei verbi che può essere utilizzato come funzione chiama direttamente sono: get, post, put, delete, patch, options. Quindi:

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

Dovrebbe funzionare bene.