阿江 2017-10-15 09:04:25 2281次浏览 0条回复 0 0 0

说明

学习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',
		],
	],
]

(全文完)

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册