yii2的restful api路由实例详解


Posted in PHP onMay 14, 2019

yii\rest\UrlRule

使用yii\rest\UrlRule来自动映射控制器的 restful 路由,简单快捷,缺点是必须得按规定好的方法名去写业务。

映射的规则如下,当然,你可以修改源码为你的习惯:

public $patterns = [
  'PUT,PATCH {id}' => 'update',
  'DELETE {id}' => 'delete',
  'GET,HEAD {id}' => 'view',
  'POST' => 'create',
  'GET,HEAD' => 'index',
  '{id}' => 'options',
  '' => 'options',
];

除了被限制了HTTP动词对应的方法名外,其他都很好用,比如pluralize是多么的优雅啊,可以自动解析单词的复数,laravel的话要一个个的去写,反而有些不方便了

'urlManager'  => [
  'enablePrettyUrl'   => true,
  'showScriptName'   => false,
  'enableStrictParsing' => true,
  'rules'        => [
    [
      'class'   => 'yii\rest\UrlRule',
      'controller' => [
        'v1/user',
        'v1/news',
        'routeAlias' => 'v1/box'
      ],
      'pluralize' => true
    ],
  ]
]

自定义路由

注意我路由里很刻意的用了复数模式,但很鸡肋,因为一些单词的复数并不是简单的加个 s 就可以了。

'urlManager'  => [
  'enablePrettyUrl'   => true,
  'showScriptName'   => false,
  'enableStrictParsing' => true,
  'rules'        => [
    // 利用 module 做个版本号也是可以的
    'GET <module:(v1|v2)>/<controller:\w+>s'         => '<module>/<controller>/index',
    'GET <module:(v1|v2)>/<controller:\w+>s/<uid:\d+>'    => '<module>/<controller>/view',
    'POST <module:(v1|v2)>/<controller:\w+>s'        => '<module>/<controller>/create',
    'PUT,PATCH <module:(v1|v2)>/<controller:\w+>s/<uid:\d+>' => '<module>/<controller>/update',
    'DELETE <module:(v1|v2)>/<controller:\w+>s/<uid:\d+>'  => '<module>/<controller>/delete',
    'OPTIONS <module:(v1|v2)>/<controller:\w+>s'       => '<module>/<controller>/options',

    '<controller:\w+>/<action:\w+>'       => '<controller>/<action>',// normal
    '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',// module
    '/'                     => 'site/default',// default route
  ]
]

当然,这种高度动态的路由也可以写的像laravel一样半静态。

'GET v1/children'         => 'v1/child/index',
'GET v1/children/<uid:\d+>'    => 'v1/child/view',
'POST v1/children'        => 'v1/child/create',
'PUT,PATCH v1/children/<uid:\d+>' => 'v1/child/update',
'DELETE v1/children/<uid:\d+>'  => 'v1/child/delete',
'OPTIONS v1/children'       => 'v1/child/options',

如同laravel的如下

Route::get("/v1/children", "ChildController@index");
Route::post("/v1/children", "ChildController@create");
Route::put("/v1/children/{uid}", "ChildController@update");
Route::patch("/v1/children/{uid}", "ChildController@update");
Route::delete("/v1/children/{uid}", "ChildController@delete");
Route::options("/v1/children", "ChildController@options");

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
给多个地址发邮件的类
Oct 09 PHP
php入门教程 精简版
Dec 13 PHP
PHP操作数组相关函数
Feb 03 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
php去掉文件前几行的方法
Jul 29 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
php的扩展写法总结
May 14 #PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 #PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 #PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 #PHP
PHP使用Redis实现Session共享的实现示例
May 12 #PHP
如何让PHP编码更加好看利于阅读
May 12 #PHP
Yii2处理密码加密及验证的方法
May 12 #PHP
You might like
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python+微信接口实现运维报警
2016/08/27 Python
python flask中静态文件的管理方法
2018/03/20 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
自荐书模板
2013/12/19 职场文书
50岁生日感言
2014/01/23 职场文书
单位工作证明书格式
2014/10/04 职场文书
迎新生欢迎词
2015/01/23 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
初三毕业感言
2015/07/31 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python