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中call_user_func_array()函数的用法演示
Feb 05 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
Oct 13 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 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
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
python生成九宫格图片
2018/11/19 Python
python打印异常信息的两种实现方式
2019/12/24 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
销售总监工作职责
2013/11/21 职场文书
企业2014年度工作总结
2014/12/10 职场文书
公司庆典欢迎词
2015/01/26 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python