Kohana에서 특정 HTTP 방법에 대해서만 일치하도록 경로를 설정할 수 있습니까 (get/post/etc)

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

  •  13-09-2019
  •  | 
  •  

문제

몇 가지 PHP 프레임 워크를 탐색하고 현재 프론트 러너는 Kohana입니다.

Rails 배경을 가지고있는 나는 Rails 커뮤니티가 "편안한"경로라고 부르는 것에 익숙해졌습니다. 따라서 "get /post"는 모든 게시물을 표시하며 게시물 컨트롤러의 색인 메소드에 의해 처리됩니다. "POST /POST"는 새 게시물 객체를 생성하고 게시물 컨트롤러의 다른 방법으로 처리됩니다.

이 두 가지 요청의 경로는 동일하기 때문에 라우터는 HTTP 방법을 기반으로 결정을 내려야합니다.

Kohana의 라우터가 이것을 할 수 있습니까?

도움이 되었습니까?

해결책

Kohana는 기본적으로 Restful 경로를 지원하지 않지만 평안한 지원을 추가하는 모듈. 참조 편안한 위키 사용을 위해.

Kohana v3.x는 편안한 컨트롤러를 직접 지원합니다. 그냥 확장하십시오 Controller_REST 대신에 Controller 그리고 모든 경로 조치는 요청 방법입니다. (ㅏ POST 요청은 대상이됩니다 action_post, 등.)

다른 팁

이 라인을 컨트롤러의 이전 () 메소드에 추가 할 수도 있습니다.

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

따라서 Get /Controller /Posts는 컨트롤러의 Action_Posts () 메소드에 의해 처리되며 Post /Controller /Posts는 Action_Post_Posts () 메소드에 의해 처리됩니다.

추신 : 내장 된 컨트롤러 _rest는 Kohana 3.2에서 제거되었습니다.

클래스 생성자에서 HTTP 방법을 확인하면 디자인이 좋지 않은 느낌이 듭니다. Rails와 마찬가지로 Kohana 3.3은 라우터에서 편안한 경로를 만들 수 있습니다 (위치).

문서를 확인하십시오 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