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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
PHP生成静态页
Nov 25 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
详解PHP数组赋值方法
Nov 07 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 PHP
PHP常量及变量区别原理详解
Aug 14 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随机生成信用卡卡号的方法
2015/03/23 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
九种js弹出对话框的方法总结
2013/03/12 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
Ruby如何创建一个线程
2013/03/10 面试题
幼儿教育感言
2014/02/05 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
小学数学国培感言
2014/03/10 职场文书
Pygame Rect区域位置的使用(图文)
2021/11/17 Python