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 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
Oct 22 PHP
php中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 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
PHP Memcached应用实现代码
2010/02/08 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php流量统计功能的实现代码
2012/09/29 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
浅谈js常用内置方法和对象
2016/09/24 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
Python运算符+与+=的方法实例
2021/02/18 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
网站编辑求职信
2013/10/17 职场文书
人事部岗位职责范本
2014/03/05 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2015年副班长工作总结
2015/05/15 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers