AuraRouterクラスでのHTTPメソッド決定方法

45 views
Skip to first unread message

Koichi TANAKA

unread,
Feb 9, 2014, 9:59:15 PM2/9/14
to bear-p...@googlegroups.com
BEAR.Package\Provide\Router\AuraRouterクラス(for Aura Router v1.x)でのルーティング設定がある場合のHTTPメソッド決定方法についてです。

この議論は下記ツイートから始まっています。
https://twitter.com/mugeso/status/432477193931722752

現状では、下記のように決定が行われています。

このとき参照している$router->valuesは下記のどれかです。

- マッチしたrouteの中でサブパターンとして指定された部分
  例:
$map->add('article','/blog/article/{:id}');
の場合"id"の値
- マッピング時にvaluesパラメーターを使ってデフォルト値として与えた値
  例:
$map->add('article', '/blog/article/{:id}', ['values' => ['format' =>'json']]);
  の場合の'format'

これには、マッチング時に利用したHTTPメソッドは含まれていないようです。

この条件で現状のAuraRouterクラスを利用するには、マッピング時に次のようにする必要があります。
$map->add(
 'article',
 
'/blog/article/{:id}',
 
['values' =>['method' =>'get']]
);

しかし、これには問題があり、 '/blog/article/{:id}'がPUTやDELETEも受け取る場合にも全部"get"にされてしまいます。

また、僕が確認した限りではAura Router 1.xでは、マッチング時に利用したHTTP メソッドは保持していないようです。

結論としては、基本は$_SERVER['REQUEST_METHOD']からの取得にし$route->values['method']はオプションで上書きできる形にすればよいと思われます。

PS.
BEAR.PackageのRouterクラスでX-HTTP-Method-Overrideをヘッダーではなくpostパラメーターとして受け取っているのも気になってます。

Koichi TANAKA

unread,
Feb 9, 2014, 10:02:15 PM2/9/14
to bear-p...@googlegroups.com

しかし、これには問題があり、 '/blog/article/{:id}'がPUTやDELETEも受け取る場合にも全部"get"にされてしまいます。

これですが、下記のように設定することで回避可能ですが、煩雑です。
 $map->add(
  'article',
  
'/blog/article/{:id}',
  
[
    'values' => ['method' =>'get'],
    'method' => ['GET']
  ]

);

 $map->add(
  'article',
  
'/blog/article/{:id}',
  
[
    'values' => ['method' =>'delete'],
    'method' => ['DELETE']
  ]

);

 $map->add(
  'article',
  
'/blog/article/{:id}',
  
[
    'values' => ['method' =>'put'],
    'method' => ['PUT']
  ]

);

 

koriym

unread,
Feb 9, 2014, 10:42:01 PM2/9/14
to bear-p...@googlegroups.com
詳しい説明ありがとうございます。


> 基本は$_SERVER['REQUEST_METHOD']からの取得にし$route->values['method']はオプションで上書きできる形にすればよいと
思われます。

良い提案だと思います。PR頂いてもいいでしょうか?
Aura.Router v2と合わせるのも良いと思います。

> BEAR.PackageのRouterクラスでX-HTTP-
Method-Overrideをヘッダーではなくpostパラメーターとして受け取っているのも気になってます。

これはheader優先にしてPOSTのパラメーターとmergeするのが良いと思いますがどうでしょうか。

2014年2月10日月曜日 11時59分15秒 UTC+9 Koichi TANAKA:

Koichi TANAKA

unread,
Feb 9, 2014, 11:48:43 PM2/9/14
to bear-p...@googlegroups.com
了解しました。
PRの準備をします。

2014年2月10日月曜日 12時42分01秒 UTC+9 koriym:
Reply all
Reply to author
Forward
0 new messages