Laravel框架实现修改登录和注册接口数据返回格式的方法


Posted in PHP onAugust 17, 2018

本文实例讲述了Laravel框架实现修改登录和注册接口数据返回格式的方法。分享给大家供大家参考,具体如下:

1、背景:需要将所有的数据返回格式统一成retCode/retMsg/data

2、登陆接口:

文件目录:app/Http/Controllers/Auth/LoginController

先写登陆接口是因为修改登录接口比注册接口要简单许多

登录接口中的第一句

use AuthenticatesUsers;

可以进去修改登录验证内容(默认是email+password登录),可以修改

validateLogin()或者直接修改username(),将email改成name,即可用name+password登录了

修改登录接口数据返回格式login()方法

public function login(Request $request)
{
    $this->validateLogin($request);
    if ($this->attemptLogin($request)) {
      $user = $this->guard()->user();
      $user->generateToken();
      $ret=new RetObject();
      $ret->retCode="0000";
      $ret->retMsg='success';
      $ret->data= $user->toArray();
    }else{
      $ret=new RetObject();
      $ret->retCode="0001";
      $ret->retMsg='failed';
      $ret->data= null;
    }
    return response()->json($ret);
}

直接修改login方法中的返回内容就可以了

3、注册接口

一开始我都不知道register的接口到底是藏在哪

然后看routes/api.php里的

Route::post('register', 'Auth\RegisterController@register');

这里register接口指向的是RegisterController中的 register方法

但是在RegisterController没有找到register方法,只有registered、validator、create这几个方法

真正的register方法在第一句的

use RegistersUsers;
RegistersUsers的register
public function register(Request $request)
{
    $this->validator($request->all())->validate();
    event(new Registered($user = $this->create($request->all())));
    $this->guard()->login($user);
    return $this->registered($request, $user)
            ?: redirect($this->redirectPath());
}

这里用到了RegisterController  中的registered、validator、create这几个方法

成功的情况下,修改数据返回格式比较简单

直接在RegisterController中的registered()方法中修改

protected function registered(Request $request,$user)
{
  $user->generateToken();
  $ret=new RetObject();
  $ret->retCode="0000";
  $ret->retMsg='register success';
  $ret->data= $user->toArray();
  return response()->json($ret);
}

然后在哪里捕捉异常然后失败的时候修改数据返回格式,捣鼓了好久。

一开始尝试直接在RegisterController中的registered()方法中使用try/catch捕捉异常信息,但是每次Debug都不会跳进来,直接在更底层验证的时候就直接输出报错信息了。

try{
  $user->generateToken();
  $ret=new RetObject();
  $ret->retCode="0000";
  $ret->retMsg='register success';
  $ret->data= $user->toArray();
  return response()->json($ret);
}catch (Exception $exception){
  $ret=new RetObject();
  $ret->retCode="0001";
  $ret->retMsg='register failed';
  $ret->data= null;
  return response()->json($ret);
}

最终在app/Exception/Handler.php

report方法是用来将异常写入日志,render是用来渲染各种异常的浏览器输出

所以我们应该是在render中修改捕捉到异常之后返回数据的格式

public function render($request, Exception $exception)
{
    // This will replace our 404 response with
    // a JSON response.
    if ($exception instanceof ModelNotFoundException &&
      $request->wantsJson())
    {
      $ret=new RetObject();
      $ret->retCode="404";
      $ret->retMsg='页面未找到';
      $ret->data= null;
      return response()->json($ret);
    }elseif ($exception instanceof ValidationException)
    {
      $ret=new RetObject();
      $ret->retCode="0001";
      $ret->retMsg=$exception->getMessage();
      $ret->data= null;
      return response()->json($ret);
    }
    return parent::render($request, $exception);
}

然后起码是可以自定义捕捉到验证数据异常ValidationException 时候的返回数据格式了,还有其他的异常也是可以直接在Handler.phprender方法中添加。

补充一下Handler的异常处理的控制器基类:目录为vendor/laravel/framework/src/Illuminate/Foundation/Exception/Handler.php

中的report和render方法

public function report(Exception $e)
{
    if ($this->shouldntReport($e)) {
      return;
    }
    try {
      $logger = $this->container->make(LoggerInterface::class);
    } catch (Exception $ex) {
      throw $e; // throw the original exception
    }
    $logger->error($e);
}
public function render($request, Exception $e)
{
    $e = $this->prepareException($e);
    if ($e instanceof HttpResponseException) {
      return $e->getResponse();
    } elseif ($e instanceof AuthenticationException) {
      return $this->unauthenticated($request, $e);
    } elseif ($e instanceof ValidationException) {
      return $this->convertValidationExceptionToResponse($e, $request);
    }
    return $this->prepareResponse($request, $e);
}

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
mysql5写入和读出乱码解决
Nov 25 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
php 获取本地IP代码
Jun 23 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
PHP生成Gif图片验证码
Oct 27 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
CI框架整合smarty步骤详解
May 19 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 #PHP
PHP实现类似题库抽题效果
Aug 16 #PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 #PHP
Laravel框架实现定时发布任务的方法
Aug 16 #PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 #PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 #PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 #PHP
You might like
转换中文日期的PHP程序
2006/10/09 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
关于vue-router的那些事儿
2018/05/23 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python3实现mysql导出excel的方法
2019/07/31 Python
基于python实现操作git过程代码解析
2020/07/27 Python
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
《从现在开始》教学反思
2014/04/15 职场文书
社会调查研究计划书
2014/05/01 职场文书
村抢险救灾方案
2014/05/09 职场文书
奉献演讲稿范文
2014/05/21 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
用Python生成会跳舞的美女
2022/01/18 Python
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers