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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
PHP中array_merge和array相加的区别分析
Jun 17 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php限制文件下载速度的代码
Oct 20 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
Yii2中SqlDataProvider用法示例
Sep 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
PHP编程网上资源导航
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
php数据访问之增删改查操作
2016/05/09 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
Python 详解基本语法_函数_返回值
2017/01/22 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
adidas美国官网:adidas US
2016/09/21 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
中等生评语大全
2014/05/04 职场文书
竞聘上岗演讲
2014/05/19 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
python的变量和简单数字类型详解
2021/09/15 Python
nginx共享内存的机制详解
2022/03/21 Servers
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
idea下配置tomcat避坑详解
2022/04/12 Servers
Ruby处理CSV数据方法详解
2022/04/18 Ruby