Yii2 Url使用Array参数重写

时间:2016-08-10 11:09:40

标签: php yii2 url-routing

我正在尝试重写以下网址

http://mywebsite.com/web/myContlr?myContlrSearch[id]=900

使用Yii2 Url管理器我正在尝试将网址更改为如下所示

http://mywebsite.com/web/myContlr/900

如何使用Yii2中的urlmanger规则进行上述格式化。此外,我还有多个参数,例如myContlrSearch[name]myContlrSearch[location],...等

请指导我构建一个宁静的网址。

1 个答案:

答案 0 :(得分:0)

如果您想让您的API RESTful,那么您应该从资源命名开始。资源应该是复数形式的名词。

例如,如果你有一些类似汽车&#34;那么相应的资源网址应该看起来像<your-domain>/cars。在这种情况下,GET /cars将是获取汽车集合的方法,GET /cars/900 - 获取ID = 900的特定汽车的方法。

接下来,如果需要您的参数来过滤资源集合,那么您应该将它们作为查询参数添加到集合资源URL,如下所示:/cars?vendor=ferrari&count=10。如果需要参数来指定实例属性(当您创建或更新某个对象时),则应将它们包含在请求主体中。

对于实例创建,您应该使用资源集合的URL:POST /cars。并且用于更新实例 - PUT /cars/<id>

让我们看看你的具体情况。您有一些名为myContlr的资源(我希望这只是示例名称),因此myContlr应该是表示对象名称的名词。查询参数中的myContlrSearch看起来像某个搜索条件对象,因此可以在查询参数中作为数组或json传递(它是better do not use request body for GET requests)。在这里使用array / json / any-other-structure不会影响您的路由 - 这应该在控制器的责任范围内。

但是,如果您要创建新对象或更新现有对象,则应使用POST /myContrlrPUT /myContrlr/900,然后在请求正文中传递您的对象(application/json或{{ 1}})。

然后您的路由配置可能如下所示:

application/xml

要了解有关在Yii2中构建RESTful API的更多信息:http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html

进一步阅读:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api