Posso percorsi di installazione in Kohana di corrispondere solo particolari metodi HTTP (GET / POST / etc)

StackOverflow https://stackoverflow.com/questions/1128777

  •  13-09-2019
  •  | 
  •  

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?

È stato utile?

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',
  ));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top