2009-07-15 9 views
8

Sto esplorando alcuni framework PHP e l'attuale front runner è Kohana.Posso impostare percorsi in Kohana solo per abbinare determinati metodi HTTP (GET/POST/etc)

Avere uno sfondo Rails Mi sono abituato a ciò che la community dei binari chiama route "RESTful". Quindi "GET/posts" visualizza tutti i post ed è gestito dal metodo index del Posts Controller. Un "POST/posts" crea un nuovo oggetto post ed è gestito da un metodo diverso di Post Controller.

Poiché il percorso in entrambe queste 2 richieste è identico, il router deve prendere decisioni in base al metodo HTTP.

Il router in Kohana è in grado di farlo?

risposta

8

Kohana non supporta le rotte RESTful per impostazione predefinita, ma esiste un modulo RESTful che ne aggiunge il supporto. Vedi l'RESTful wiki per l'uso.

Kohana v3.x supporta direttamente i controller RESTful. Estendi semplicemente lo Controller_REST anziché lo Controller e tutta l'azione del percorso sarà il metodo di richiesta. (Una richiesta POST sarebbe mirato a action_post, etc.)

+0

Come di 3,2, il regolatore Controller_REST è stato rimosso dal nucleo Kohana quanto non era molto riposante. Vedi: http://forum.kohanaframework.org/discussion/9004/kohana-rest-controller/p1 – eipark

2

Si potrebbe anche aggiungere queste righe al controller di prima() metodo:

if ($this->request->method() == "POST") 
{ 
    $this->request->action("post_".$this->request->action()); 
} 

in modo da ottenere/Controller/messaggi saranno trattati dai action_posts() nel tuo controller, mentre POST/controller/post saranno gestiti dal metodo action_post_posts().

PS: Il built-in Controller_REST è stato rimosso in Kohana 3.2

0

Controllo del metodo HTTP nel costruttore della classe si sente come cattiva progettazione a me. Come Rails, Kohana 3.3 può creare percorsi RESTful nel router (a cui appartengono).

Consultare la documentazione per Kohana 3.3 Route Filters.

Ecco un esempio:

Route::set('Posts', 'posts/<id>', array('id' => '\d+')) 
    ->filter(function($route, $params, $request) { 
    $params['action'] = strtolower($request->method()); 
    return $params; 
    }) 
    ->defaults(array(
    'controller' => 'Post', 
)); 
Problemi correlati