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 相关文章推荐
VFP与其他应用程序的集成
Oct 09 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
PHP测试程序运行时间的类
Feb 05 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 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远程采集图片详细教程
2014/07/01 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python的正则表达式re模块的常用方法
2013/03/09 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
详解Python中where()函数的用法
2018/03/27 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
python装饰器代码深入讲解
2021/03/01 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
中学老师的自我评价
2013/11/07 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
Python 统计序列中元素的出现频度
2022/04/26 Python
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android