¿Puedo rutas de instalación en Kohana para solo particulares métodos HTTP (GET / POST / etc)

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

  •  13-09-2019
  •  | 
  •  

Pregunta

Estoy explorando unos marcos de PHP y el principal candidato actual es Kohana.

Tener un fondo rieles he acostumbrado a lo que la comunidad rieles llama rutas "tranquilo". Por lo tanto un "GET / mensajes" muestra todos los mensajes y es manejado por el método del índice del controlador de Mensajes. A "del poste / mensajes" crea un nuevo objeto de mensaje y es manejado por un método diferente del controlador Mensajes.

Puesto que la trayectoria en ambos estos 2 solicitudes es idéntico, el router tiene que tomar decisiones basadas en el método de HTTP.

Es el router en Kohana capaz de hacer esto?

¿Fue útil?

Solución

Kohana no admite rutas RESTful por defecto, pero hay un módulo REST que añade soporte para ello. Vea la wiki de descanso para su uso.

Kohana v3.x soporta controladores REST directamente. Sólo se extienden Controller_REST en lugar de Controller y toda la acción ruta será el método de la petición. (A petición POST se dirigiría a action_post, etc.)

Otros consejos

También puede añadir estas líneas a su controlador del método antes de ():

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

así obtener / controlador / mensajes serán manejados por los action_posts () en el controlador, mientras que el poste / controlador / mensajes serán manejados por los action_post_posts () método.

PS: El Controller_REST fue eliminado en Kohana 3.2 incorporada

Comprobación del método HTTP en el constructor de la clase se siente como un mal diseño para mí. Al igual que los carriles, Kohana 3.3 puede crear rutas de descanso en el router (al que pertenecen).

Salida de la documentación para Kohana 3.3 Ruta Filtros .

Este es un ejemplo:

Route::set('Posts', 'posts/<id>', array('id' => '\d+'))
  ->filter(function($route, $params, $request) {
    $params['action'] = strtolower($request->method());
    return $params;
  })
  ->defaults(array(
    'controller' => 'Post',
  ));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top