2009-07-15 10 views
8

私はいくつかのPHPフレームワークを調査中で、現在のフロントランナーはKohanaです。特定のHTTPメソッド(GET/POST/etc)に一致するようにKohanaのルートを設定できますか?

私は、レールコミュニティが「RESTful」ルートと呼ぶものに慣れてきました。したがって、 "GET/posts"はすべての投稿を表示し、Posts Controllerのindexメソッドで処理されます。 「POST/posts」は新しい投稿オブジェクトを作成し、Posts Controllerの別の方法で処理されます。

これらの2つの要求のパスはすべて同一であるため、ルータはHTTP方式に基づいて決定する必要があります。

Kohanaのルータはこれを実行できますか?

答えて

8

KohanaはデフォルトでRESTfulルートをサポートしていませんが、サポートを追加するモジュールはRESTfulです。使用方法については、RESTful wikiを参照してください。

Kohana v3.xはRESTfulコントローラを直接サポートします。 Controllerの代わりにController_RESTを延長するだけで、すべてのルートアクションがリクエストメソッドになります。 (POST要求がaction_postなどに標的にする)

+0

、それは非常にRESTfulではなかったとして、Controller_RESTコントローラはKohanaのコアから削除されました。参照:http://forum.kohanaframework.org/discussion/9004/kohana-rest-controller/p1 – eipark

2

あなたはまた、あなたのコントローラの前に()メソッドに以下の行を追加することができます。

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

はそう/コントローラ/ポストはaction_postsによって処理されますGET ()メソッドで処理されますが、POST /コントローラ/ポストはaction_post_posts()メソッドで処理されます。

PS:ビルトインController_RESTクラスのコンストラクタでのHTTPメソッドを確認する

0

Kohanaの3.2で削除されましたが、私には貧しいデザインのように感じています。 Railsと同様に、Kohana 3.3はルータにRESTfulなルートを作成することができます。

Kohana 3.3 Route Filtersのドキュメントをご覧ください。ここで

は例です:3.2のよう

Route::set('Posts', 'posts/<id>', array('id' => '\d+')) 
    ->filter(function($route, $params, $request) { 
    $params['action'] = strtolower($request->method()); 
    return $params; 
    }) 
    ->defaults(array(
    'controller' => 'Post', 
)); 
関連する問題