我正在尝试重写以下网址
http://mywebsite.com/web/myContlr?myContlrSearch[id]=900
使用Yii2 Url管理器我正在尝试将网址更改为如下所示
http://mywebsite.com/web/myContlr/900
如何使用Yii2中的urlmanger规则进行上述格式化。此外,我还有多个参数,例如myContlrSearch[name]
,myContlrSearch[location]
,...等
请指导我构建一个宁静的网址。
答案 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 /myContrlr
或PUT /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