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 相关文章推荐
php实现mysql同步的实现方法
Oct 21 PHP
php打造属于自己的MVC框架
Mar 07 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
php实现根据字符串生成对应数组的方法
Sep 22 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
PHP递归实现层级树状展开
Apr 01 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
PHP中常用的魔术方法
Apr 28 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
laravel 解决强制跳转 https的问题
Oct 22 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
js获取视频时长代码
2014/04/10 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python 列表list使用介绍
2014/11/30 Python
使用pdb模块调试Python程序实例
2015/06/02 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
公司董事长职责
2013/12/12 职场文书
教育科研先进个人材料
2014/01/26 职场文书
优秀教师事迹简介
2014/02/02 职场文书
英文求职信范文
2014/05/23 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
病危通知书样本
2015/04/17 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
Python访问Redis的详细操作
2021/06/26 Python
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
SQL语句多表联合查询的方法示例
2022/04/18 MySQL