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 结果集的分页实现代码
Mar 10 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
php获取新浪微博数据API实例
Nov 12 PHP
Zend Framework页面缓存实例
Jun 25 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
PHP 搜索查询功能实现
Nov 29 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP asXML()函数讲解
Feb 03 PHP
laravel 数据验证规则详解
Oct 23 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版国家代码、缩写查询函数代码
2011/08/14 PHP
php中的观察者模式简单实例
2015/01/20 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
php实现socket推送技术的示例
2017/12/20 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
angularjs实现猜大小功能
2017/10/23 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
使用Python构建Hopfield网络的教程
2015/04/14 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
keras topN显示,自编写代码案例
2020/07/03 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
出国留学介绍信
2014/01/13 职场文书
知识竞赛主持词
2014/03/26 职场文书
英文演讲稿开场白
2014/08/25 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书