Могу ли я настроить маршруты в Kohana так, чтобы они соответствовали только определенным методам HTTP (GET/POST/и т. д.)

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

  •  13-09-2019
  •  | 
  •  

Вопрос

Я изучаю несколько PHP-фреймворков, и на данный момент фаворитом является Kohana.

Имея опыт работы с Rails, я привык к тому, что сообщество Rails называет «RESTful» маршрутами.Таким образом, «GET /posts» отображает все сообщения и обрабатывается индексным методом контроллера сообщений.«POST /posts» создает новый объект сообщения и обрабатывается другим методом контроллера сообщений.

Поскольку путь в обоих этих двух запросах идентичен, маршрутизатору необходимо принимать решения на основе метода HTTP.

Способен ли роутер в Кохане это сделать?

Это было полезно?

Решение

Kohana по умолчанию не поддерживает маршруты RESTful, но есть RESTful модуль, который добавляет его поддержку.См. RESTful вики для использования.

Kohana v3.x напрямую поддерживает контроллеры RESTful.Просто продлите Controller_REST вместо Controller и все действия маршрута будут методом запроса.(А POST запрос будет нацелен на action_post, и т. д.)

Другие советы

Вы также можете добавить эти строки в метод before() вашего контроллера:

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

поэтому GET /controller/posts будет обрабатываться методом action_posts() в вашем контроллере, а POST /controller/posts будет обрабатываться методом action_post_posts().

ПС:Встроенный Controller_REST был удален в Kohana 3.2.

Проверка метода HTTP в конструкторе класса мне кажется плохим дизайном.Как и Rails, Kohana 3.3 может создавать маршруты RESTful в маршрутизаторе (где им и место).

Ознакомьтесь с документацией по Kohana 3.3 Фильтры маршрутов.

Вот пример:

Route::set('Posts', 'posts/<id>', array('id' => '\d+'))
  ->filter(function($route, $params, $request) {
    $params['action'] = strtolower($request->method());
    return $params;
  })
  ->defaults(array(
    'controller' => 'Post',
  ));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top