项目作者: nyzhangbing

项目描述 :
基于yii2的一个restful模板项目
高级语言: PHP
项目地址: git://github.com/nyzhangbing/yii2-api-template.git
创建时间: 2019-09-11T03:08:18Z
项目社区:https://github.com/nyzhangbing/yii2-api-template

开源协议:Other

下载


基于yii2的restful api模板项目

这是一个基于yii2的restful api模板项目,提供登录态管理、日志、性能分析、依赖的自动发现注册、对原生restful url rule进行扩展、任务计划管理等功能

目录结构

  1. commands/ 命令行程序
  2. config/ 应用配置文件及系统任务配置
  3. constants/ 常量
  4. core/ 基础公共类
  5. enums/ 枚举
  6. environments/ 提供各个环境的配置文件
  7. modules/ 模块
  8. services/ 服务类
  9. controllers/ 包含控制器
  10. mail/ 邮件模板
  11. models/ 数据模型
  12. web/ 包含入口脚本及静态资源

要求

此项目最低要求PHP 7.1

安装方式

  1. composer install

配置方式

创建一个restful风格的控制器

1、创建一个模块

  1. businesses/ 业务代码实现
  2. businesses/BusinessInterface 为业务定义规范接口
  3. controllers/ 模块对应的控制器

目录结构请按照此标准,接口和实现类命名需满足一定标准 如用户服务UserBusiness对应的接口应该是BusinessInterface/IUserBusiness,遵循此标准对应的接口和实现类的依赖关系将会自动注册

2、创建一个控制器

  1. <?php
  2. namespace app\modules\account\controllers;
  3. use app\constants\ErrInfo;
  4. use app\core\{
  5. QcController, QcException, QcResponse
  6. };
  7. use app\modules\account\businesses\BusinessInterface\IUserBusiness;
  8. use yii\base\NotSupportedException;
  9. class UserController extends QcController
  10. {
  11. private $userBusiness;
  12. function __construct($id, $module, IUserBusiness $userBusiness, array $config = [])
  13. {
  14. $this->userBusiness = $userBusiness;
  15. parent::__construct($id, $module, $config);
  16. }
  17. public function actionIndex()
  18. {
  19. $pageIndex = \Yii::$app->request->get('pageIndex', 1);
  20. $pageSize = \Yii::$app->request->get('pageSize', 10);
  21. $userName = \Yii::$app->request->get('user_name', '');
  22. $mobile = \Yii::$app->request->get('mobile', '');
  23. $status = \Yii::$app->request->get('status', '');
  24. $data = $this->userBusiness->getList([
  25. 'user_name' => $userName,
  26. 'mobile' => $mobile,
  27. 'status' => $status
  28. ], $pageIndex, $pageSize);
  29. return new QcResponse($data);
  30. }
  31. public function actionHandle($id, $operation)
  32. {
  33. switch ($operation) {
  34. case 'enable':
  35. $this->userBusiness->enable($id);
  36. break;
  37. case 'disable':
  38. $this->userBusiness->disable($id);
  39. break;
  40. case 'setprincipals':
  41. $principals = \Yii::$app->request->post('principals', []);
  42. $this->userBusiness->setPrincipals($id, $principals);
  43. break;
  44. default:
  45. throw new NotSupportedException('不支持的操作');
  46. }
  47. return new QcResponse();
  48. }
  49. public function actionCreate()
  50. {
  51. $data = \Yii::$app->request->post();
  52. if (empty($data))
  53. throw new QcException(ErrInfo::MISS_REQUIRE_PARAMS);
  54. $this->userBusiness->add($data['user_name'], $data['mobile'], $data['email'], $data['password']);
  55. return new QcResponse();
  56. }
  57. public function actionUpdate($id)
  58. {
  59. $data = \Yii::$app->request->post();
  60. if (empty($data))
  61. throw new QcException(ErrInfo::MISS_REQUIRE_PARAMS);
  62. $this->userBusiness->update($id, $data['user_name'], $data['mobile'], $data['email'], $data['password']);
  63. return new QcResponse();
  64. }
  65. public function actionView($id)
  66. {
  67. $data = $this->userBusiness->getModelById($id);
  68. return new QcResponse($data);
  69. }
  70. }

此处actionHandle是框架基于yii2原生restful扩展出的方法,用于实现HttpMethod不能表达的对于资源的操作行为,如启用、禁用等操作

3、配置模块
config/web.phpmodules节点下,配置启用该模块

  1. 'modules' => [
  2. 'account' => [
  3. 'class' => 'app\modules\account\Module',
  4. 'businessNamespace' => 'app\modules\account\businesses',
  5. 'controllerNamespace' => 'app\modules\account\controllers',
  6. 'autoRegisterRouters' => true
  7. ],
  8. ],

调用示例:

获取用户列表 GET http://host:port/account/users
创建一个用户 POST http://host:port/account/users
获取单个用户信息 GET http://host:port/account/users/1
更新用户信息 PUT http://host:port/account/users/1
删除一个用户 DELETE http://host:port/account/users/1
禁用一个用户 POST http://host:port/account/users/1/disable

用户登录态使用

1、登录

请求接口http://host:port/user/login,输入登录类型、用户名、密码,登录成功token信息

  1. {
  2. "code": 0,
  3. "message": "ok",
  4. "request_id": "JNCzOboICoKujJBF1O_A-FQvJwmOIB6c",
  5. "data": {
  6. "id": "1",
  7. "user_name": "张三",
  8. "email": "test@qq.com",
  9. "mobile": "15688888888",
  10. "token": "JYh6YT9pD9tSTGHXx6oSZVvBtJ3TNxx9"
  11. },
  12. "profiling": {
  13. "db": {
  14. "sqlCount": 4,
  15. "duration": 0.046414375305176
  16. }
  17. }
  18. }

2、使用登录态操作资源

  1. 把上一步获取到的token放入httpheader中,格式如下:
  2. WWW-Authorization Bearer JYh6YT9pD9tSTGHXx6oSZVvBtJ3TNxx9
  3. 调用接口服务端即可识别当前用户

添加一个定时任务

1、创建任务类

  1. <?php
  2. namespace app\commands\tasks;
  3. class DemoTask extends Task
  4. {
  5. /**
  6. * 任务名称
  7. * @return string
  8. */
  9. protected function getTaskName(): string
  10. {
  11. return '这是一个任务';
  12. }
  13. /**
  14. * 任务处理器
  15. * @param array $params
  16. * @return mixed
  17. */
  18. protected function run(array $params)
  19. {
  20. //do something...
  21. }
  22. }

2、配置任务执行方式,在config/schedule.php中进行如下配置

  1. <?php
  2. /** * @var \omnilight\scheduling\Schedule $schedule */
  3. //每分钟执行一次
  4. $schedule->command('task/run ' . base64_encode(\app\commands\tasks\DemoTask::class))
  5. ->everyMinute();

3、在crontab中进行配置

  1. * * * * * php /path/to/yii yii schedule/run --scheduleFile=@app/config/schedule.php 1>> /dev/null 2>&1

计划任务更多用法请参考omnilight/yii2-scheduling