1

我正在 Yii 中创建一个 REST API,我想像这样构建我的 URL:

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

第一个返回 HTML 视图,.xml 返回 XML,.json 返回 JSON。

这是我在 main.php 中的 urlManager 规则中的内容:

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

我想如果我传递了一个格式变量,那么如果它是空白的,我知道它应该返回 HTML,或者如果传递了格式,则返回 json/xml。我试过这个:

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

它适用于 .xml 和 .json,但不适用于我的 url 只是 /api/list

我的问题是如何在 urlManager 中设置 URL 以使其工作?

4

1 回答 1

2

在 php 正则表达式中,?用于匹配 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:

但是,上述内容也将允许以下类型的网址:api/my_model.

为避免这种情况,您可以将移动到格式变量中:

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

但这将导致format.xmlor .json。所以,我们有另一种选择:

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

这应该适用于您想要的所有网址,并且也可以匹配formatxmlor json

于 2012-08-17T23:40:00.217 回答