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 相关文章推荐
UCenter Home二次开发指南
May 28 PHP
网站用php实现paypal整合方法
Nov 28 PHP
一个简单且很好用的php分页类
Oct 26 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
php浏览历史记录的方法
Mar 10 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
php批量修改表结构实例
May 24 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
php语法检查的方法总结
Jan 21 PHP
PHP递归的三种常用方式
Feb 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
PHP一些有意思的小区别
2006/12/06 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python复制目录结构脚本代码分享
2015/03/06 Python
Python写的一个简单监控系统
2015/06/19 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
python hash每次调用结果不同的原因
2019/11/21 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
货车司机岗位职责
2014/03/18 职场文书
文明城市标语
2014/06/16 职场文书
幽灵公主观后感
2015/06/09 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript