Posso percorsi di installazione in Kohana di corrispondere solo particolari metodi HTTP (GET / POST / etc)
Domanda
Sto esplorando alcuni framework PHP e l'attuale front runner è Kohana.
Avere uno sfondo Rails ho abituato a ciò che la comunità rotaie chiama percorsi "riposante". Quindi un "GET / post" consente di visualizzare tutti i messaggi e viene gestito con il metodo indice del controller messaggi. A "POST / messaggi" crea un nuovo oggetto postale e è gestita da un diverso metodo di Controller messaggi.
Dato che il percorso in entrambe queste 2 domande è identico, il router ha bisogno di prendere decisioni sulla base del metodo HTTP.
È il router in Kohana capace di fare questo?
Soluzione
Kohana non supporta percorsi RESTful per impostazione predefinita, ma c'è un modulo RESTful che aggiunge il supporto per questo. Vedere la RESTful wiki per l'utilizzo.
Kohana v3.x supporta i controller RESTful direttamente. Basta estendere Controller_REST
invece di Controller
e tutta l'azione percorso sarà il metodo di richiesta. (Una richiesta POST
sarebbe mirato a action_post
, ecc.)
Altri suggerimenti
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 () il metodo nel controller, mentre POST / Controller / messaggi saranno trattati dai action_post_posts () metodo.
PS: Il built-in Controller_REST è stato rimosso in Kohana 3.2
Verifica 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).
Controlla la documentazione per Kohana 3.3 percorso Filtri .
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',
));