fproject / yii2-restx
针对 Yii2 框架的扩展 RESTful
Requires
- php: >=5.4.0
- ext-json: *
- fproject/yii2-common: *
- yiisoft/yii2: *
Requires (Dev)
README
扩展 Yii2 框架以支持 F-Project 服务器站点 RESTful
这是什么?
ActiveController
Yii2-restx 提供了类 fproject\rest\ActiveController
,它扩展了 yii\rest\ActiveController,并添加了额外的 REST 端点和方法,以便与 F-Project 框架 Flex 客户端一起工作。
默认情况下,支持以下操作
index
: 模型的列表。支持查询条件、分页和排序。view
: 返回一个模型的详细信息create
: 创建一个新的模型update
: 更新现有的模型delete
: 删除现有的模型options
: 返回允许的 HTTP 方法save
: 保存(更新或插入)一个模型batch-save
: 批量保存(更新或插入)模型batch-remove
: 批量删除现有的模型
您可以通过重写 actions()
并取消设置相应的操作来禁用这些操作中的某些操作。
要添加新的操作,可以重写 actions()
并追加新的操作类,或者编写新的操作方法。确保您还重写了 verbs()
以正确声明新操作允许的 HTTP 方法。
通常应重写 checkAccess()
来检查当前用户是否有权限对指定的模型执行指定的操作。
UrlRule
Yii2-RESTx 还提供了类 fproject\rest\UrlRule
,用于为活动控制器配置 URL 规则以接受扩展路由。
UrlRule 类提供了简化创建 URL 规则以支持 RESTful API 的方法。
UrlRule 的最简单用法是在应用程序配置中声明以下规则
[ 'class' => 'fproject\rest\UrlRule', 'controller' => 'user', ]
上面的代码将创建一系列支持以下 RESTful API 端点的 URL 规则
'PUT,PATCH users/<id>' => 'user/update'
: 更新一个用户'DELETE users/<id>' => 'user/delete'
: 删除一个用户'GET users/remove/<id>' => 'user/delete'
: 删除一个用户'POST users/batch-remove' => 'user/batch-remove'
: 批量删除一组用户'GET,HEAD users/<id>' => 'user/view'
: 返回一个用户的详细信息/概要/选项'POST users' => 'user/create'
: 创建一个新用户'POST users/save' => 'user/save'
: 保存一个用户'POST users/batch-save' => 'user/batch-save'
: 保存一个用户'GET,HEAD users' => 'user/index'
: 返回用户列表/概要/选项'users/<id>' => 'user/options'
: 处理用户的所有未处理动词'users' => 'user/options'
: 处理用户集合的所有未处理动词
您可以使用 only
和/或 except
配置来禁用上述规则中的某些规则。您可以使用 patterns
完全重新定义自己的规则列表。您可以使用 controller
配置多个控制器 ID 以为所有这些控制器生成规则。例如,以下代码将禁用 delete
规则并为 user
和 post
控制器生成规则
[ 'class' => 'fproject\rest\UrlRule', 'controller' => ['user', 'post'], 'except' => ['delete'], ]
controller
属性是必需的,应表示一个或多个控制器 ID。如果控制器位于模块中,则每个控制器 ID 应以模块 ID 为前缀。在模式中使用的控制器 ID 将自动复数化(例如,user
变为 users
,如上述示例所示)。
安装
安装此扩展的最佳方式是通过 composer。
composer.phar require fproject/yii2-restx:"*"
用法
- 在您的Yii配置文件中,使用 fproject\rest\UrlRule 替代 yii\rest\UrlRule
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'rules' => [
['class' => 'fproject\rest\UrlRule', 'controller' => 'user'],
],
]
- 让您的控制器继承 fproject\rest\ActiveController 而不是 yii\rest\ActiveController
class UserController extends \fproject\rest\ActiveController{
public $modelClass = 'app\models\User';
}
示例
请参阅GitHub仓库中的示例项目: https://github.com/fproject/fprj-test-server-yii2