2009-07-15 25 views
8

Birkaç PHP çerçevesini araştırıyorum ve şu anki ön koşucu Kohana.Yalnızca belirli HTTP yöntemleriyle (GET/POST/etc) eşleştirmek için Kohana'da rota ayarlayabilir miyim (GET/POST/etc)

Rails arka planına sahip olursak, rayların topluluğunun "RESTful" yollarını çağırdığı yere alışkınım. Yani bir "GET/posts" tüm mesajları görüntüler ve Mesajlar Denetleyicisinin dizin yöntemiyle işlenir. Bir "POST/posts", yeni bir post nesnesini oluşturur ve Posts Controller'ın farklı bir yöntemi tarafından işlenir.

Bu iki isteğin her ikisinde de yol aynı olduğundan, yönlendiricinin HTTP yöntemine dayanarak karar vermesi gerekir.

Yönlendirici, Kohana'da bunu yapabilir mi?

cevap

8

Kohana, RESTful rotalarını varsayılan olarak desteklemez, ancak buna destek ekleyen bir RESTful modülü vardır. Kullanım için RESTful wiki'a bakın.

Kohana v3.x, RESTful denetleyicileri doğrudan destekler. Yalnızca Controller yerine Controller_REST'u uzatın ve tüm rota eylemi istek yöntemi olacaktır.

+0

, Controller_REST Kontrol Kohana çekirdekten uzaklaştırılmıştır. Bakınız: http://forum.kohanaframework.org/discussion/9004/kohana-rest-controller/p1 – eipark

2

Ayrıca() yöntemine önce kontrolör giden tarihiyle bu satırları ekleyebilir (A POST isteği vb action_post hedeflenebilir olacaktır):

yüzden/kontrolör/mesajlar action_posts tarafından ele alınacaktır GET
if ($this->request->method() == "POST") 
{ 
    $this->request->action("post_".$this->request->action()); 
} 

() yöntemi denetleyicinizde, POST/denetleyici/mesajlar action_post_posts() yöntemi tarafından işlenecektir.

PS: Yerleşik Controller_REST sınıf yapıcısı HTTP yöntemini kontrol edilmesi

0

Kohana 3.2'de uzaklaştırıldı bana kötü tasarım gibi hissediyor. Rails gibi, Kohana 3.3 yönlendiricide RESTful rotaları oluşturabilir (ait oldukları yere).

Kohana 3.3 Route Filters belgelerine göz atın.

Burada bir örnek verilmiştir: çok dinlendirici değildi

3.2 itibarıyla
Route::set('Posts', 'posts/<id>', array('id' => '\d+')) 
    ->filter(function($route, $params, $request) { 
    $params['action'] = strtolower($request->method()); 
    return $params; 
    }) 
    ->defaults(array(
    'controller' => 'Post', 
)); 
İlgili konular