1

I'm creating a REST API in Yii and I'd like to build my URLs like this:

/api/my_model
/api/my_model.xml
/api/my_model.json

Where the first one returns the HTML view, .xml returns XML and .json returns JSON.

This is what I have in the rules for urlManager in main.php:

array('api/list/', 'pattern'=>'api/<model:\w+>', 'verb'=>'GET'),

I figure if I pass a format variable, then if it's blank I know it should return HTML, or json/xml if a format is passed. I tried this:

array('api/list/', 'pattern'=>'api/<model:\w+>.<format:(xml|json)>', 'verb'=>'GET'),

And it works great for .xml and .json, but not when my url is just /api/list

My question is how do I setup the URLs in urlManager to make this work?

4

1 に答える 1

2

PHP の正規表現で?は、前の文字の 1 つまたは 1 つに一致しない場合に使用されるため、

a? means zero or one of a

次に、それをルールで使用できます。

array('api/list/', 'pattern'=>'api/<model:\w+>.<format:(xml|json)>?', 'verb'=>'GET'),
// notice the ? at the end of format:

ただし、上記は次のタイプの URL も許可します。api/my_model.

これを回避するには、ドットを format 変数に移動します。

array('api/list/', 'pattern'=>'api/<model:\w+><format:(.xml|.json)>?', 'verb'=>'GET'),

しかし、それはformator.xmlになり.jsonます。したがって、別の選択肢があります。

array('api/list/', 'pattern'=>'api/<model:\w+>(.<format:(xml|json)>)?', 'verb'=>'GET'),

これは、必要に応じてすべての URL で機能し、 またはformatのいずれかxmlに一致するはずですjson

于 2012-08-17T23:40:00.217 に答える