[Yii2笔记]070 RESTful的路由(Routing) [ 技术分享 ]
说明
学习Yii Framework 2(易2框架)的过程是漫长的,也是充满乐趣的,以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现,提供了较完整的代码,供你参考。不妥之处,请多多指正!
原文网址:
http://www.yiiframework.com/doc-2.0/guide-rest-routing.html
本文主题:RESTful的路由(Routing)
资源类和控制器类准备好以后,你就可以使用URL获取资源了,如http://localhost/index.php?r=user/create,与普通Web应用的访问相类似。
在实操中,通常会使用简洁网址(pretty URLs),并受益于HTTP动词(verbs)。例如,一个请求POST /users意味着获取user/create动作,可以在应用配置中通过配置urlManager应用组件轻松实现,代码如下:
'urlManager'=>[
'enablePrettyUrl'=>true,
'enableStrictParsing'=>true,
'showScriptName'=>false,
'rules'=>[
['class'=>'yii\rest\UrlRule','controller'=>'user'],
],
],
与Web应用的URL管理相比,上例中使用了yii\rest\UrlRule来路由RESTful API的请求,这个特殊的URL规则将创建一整套子URL规则来支持路由并为指定的控制器进行URL创建工作,例如,上面的代码与以下规则基本相等:
[
'PUT,PATCH users/<id>'=>'user/update',
'DELETE users/<id>'=>'user/delete',
'GET,HEAD users/<id>'=>'user/view',
'POST users'=>'user/create',
'GET,HEAD users'=>'user/index',
'users/<id>'=>'user/options',
'users'=>'user/options',
]
这条规则支持以下API端点(endpoint): GET /users:分页列出所有用户 HEAD /users:显示用户列表的概况 POST /users:创建一个新用户 GET /users/123:返回用户123的详情 HEAD /users/123:返回用户123的概况 PUT /users/123:更新用户123(全局) PATCH /users/123:更新用户123(局部) DELETE /users/123:删除用户123 OPTIONS /users:显示端点/users支持的动词(verbs) OPTIONs /users/123:显示端点/users/123支持的动词
你可以配置only和except选项明确列出哪个动作支持,哪个动作被禁用。例如:
[
'class' => 'yii\rest\UrlRule',
'controller'=>'user',
'except'=>['delete','create','update'],
]
你也可以配置patterns或extraPatterns来重新定义已存在的模式或添加新模式以支持这条规则,例如,要使用GET /users/search支持一个新的动作search,需要配置extraPatterns如下:
[
'class'=>'yii\rest\UrlRule',
'controller'=>'user',
'extraPatterns'=>[
'GET search'=>'search',
],
]
你可能已经注意到了在端点URL中控制器user是以复数形式users出现的,这是因为当创建子路径规则时,由yii\rest\UrlRule自动复数化控制器ID,你可以通过设置yii\rest\UrlRule::$pluralize 为false来禁用些功能。
信息:复数化控制器ID由yii\helpers\Inflector::pluralize()来实现,此方法关联到特定的复数化规则,例如,box将被复数化为boxes,而不是boxs。
//获取$word的复数单词
$word=\yii\helpers\Inflector::pluralize($word);
//获取$word的单数单词
$word=\yii\helpers\Inflector::singularize($word);
//单复数转换涉及到的几个数组变量:
yii\helpers\Inflector::$plurals
yii\helpers\Inflector::$singulars
yii\helpers\Inflector::$specials
当自动复数化无法满足你的需求时,你也可以配置yii\rest\UrlRule::$controller 属性来显示定义如何将端点URL中的名称映射为一个控制器ID,例如,以下代码映射名称u到控制器user:
[
'class' => 'yii\rest\UrlRule',
'controller' => ['u' => 'user'],
]
//映射之后使用以下地址访问:
http://localhost:8086/u/5
Extra configuration for contained rules(为包含的规则扩展配置)
为应用到yii\rest\UrlRule中的每条规则去定义扩展配置是非常有效的,一个很好的例子是为expand参数定义默认值:
[
'class' =>'yii\rest\UrlRule',
'controller'=>['user'],
'ruleConfig'=>[
'class'=>'yii\web\UrlRule',
'defaults'=>[
'expand'=>'profile',
],
],
]
(全文完)
共 0 条回复
阿江
最后登录:2024-03-03
在线时长:186小时21分
- 粉丝94
- 金钱16816
- 威望160
- 积分20276