2009-07-15 27 views
8

Tôi đang khám phá một vài khung công tác PHP và nhân vật hậu vệ hiện tại là Kohana.Tôi có thể thiết lập các tuyến đường ở Kohana để chỉ phù hợp với các phương thức HTTP cụ thể (GET/POST/etc)

Có nền Rails tôi đã quen với những gì cộng đồng đường ray gọi là các tuyến đường "RESTful". Vì vậy, một "GET/posts" hiển thị tất cả các bài viết và được xử lý bằng phương thức index của Posts Controller. "POST/posts" tạo một đối tượng bài đăng mới và được xử lý bằng một phương thức khác của Trình điều khiển Bài đăng.

Vì đường dẫn trong cả hai yêu cầu này giống nhau, nên router cần đưa ra quyết định dựa trên phương pháp HTTP.

Bộ định tuyến ở Kohana có khả năng thực hiện việc này không?

Trả lời

8

Kohana không hỗ trợ các tuyến RESTful theo mặc định, nhưng có một mô-đun RESTful bổ sung hỗ trợ cho nó. Xem RESTful wiki để sử dụng.

Kohana v3.x hỗ trợ các bộ điều khiển RESTful trực tiếp. Chỉ cần mở rộng Controller_REST thay vì Controller và tất cả hành động tuyến đường sẽ là phương thức yêu cầu. (Yêu cầu POST sẽ được nhắm mục tiêu đến action_post, vv)

+0

Tính đến 3.2, Controller Controller_REST đã bị xóa khỏi Kohana lõi như nó đã không phải là rất yên tĩnh. Xem: http://forum.kohanaframework.org/discussion/9004/kohana-rest-controller/p1 – eipark

2

Bạn cũng có thể thêm các dòng này của điều khiển của bạn trước đó) phương pháp (:

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

để GET/controller/bài viết sẽ được xử lý bởi các action_posts() trong bộ điều khiển của bạn, trong khi POST/controller/posts sẽ được xử lý bởi phương thức action_post_posts().

PS: Việc xây dựng trong Controller_REST được loại bỏ trong Kohana 3.2

0

Kiểm tra phương thức HTTP trong constructor lớp cảm thấy như thiết kế nghèo đối với tôi. Giống như Rails, Kohana 3.3 có thể tạo các tuyến RESTful trong router (nơi chúng thuộc về).

Xem tài liệu cho Kohana 3.3 Route Filters.

Dưới đây là một ví dụ:

Route::set('Posts', 'posts/<id>', array('id' => '\d+')) 
    ->filter(function($route, $params, $request) { 
    $params['action'] = strtolower($request->method()); 
    return $params; 
    }) 
    ->defaults(array(
    'controller' => 'Post', 
)); 
Các vấn đề liên quan