Posso rotas de instalação no Kohana para corresponder apenas determinados métodos HTTP (GET / POST / etc)

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

  •  13-09-2019
  •  | 
  •  

Pergunta

Estou explorando alguns frameworks PHP e a pioneira atual é Kohana.

Ter um fundo Rails eu me tornei usado para que os trilhos chamadas da comunidade rotas "RESTful". Assim, um "ficar / posts" exibe todos os posts e é tratado pelo método do índice do controlador de Mensagens. A "POST / posts" cria um novo objeto de pós e é tratado por um método diferente do controlador de mensagens.

Uma vez que o caminho em ambas as 2 pedidos é idêntico, as necessidades do roteador para tomar decisões com base no método HTTP.

É o roteador em Kohana capaz de fazer isso?

Foi útil?

Solução

Kohana não suporta rotas RESTful por padrão, mas há um RESTful módulo que adiciona suporte para ele. Veja a RESTful wiki para uso.

Kohana v3.x suportes controladores RESTful diretamente. Apenas estender Controller_REST vez de Controller e toda a ação rota será o método de solicitação. (A pedido POST seriam direcionados para action_post, etc.)

Outras dicas

Você também pode adicionar estas linhas ao seu controlador é antes () método:

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

Portanto, obter / controller / mensagens serão tratadas pelas action_posts () no seu controlador, enquanto o POST / controller / mensagens serão tratadas pelas action_post_posts () método.

PS: O embutido Controller_REST foi removido em Kohana 3.2

Verificar o método HTTP no construtor da classe se sente como design pobre para mim. Como Rails, Kohana 3.3 pode criar rotas RESTful no router (onde eles pertencem).

Confira a documentação para Kohana 3.3 Route Filtros .

Aqui está um exemplo:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top