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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
yii上传文件或图片实例
Apr 01 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
Apr 28 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php英文单词统计器
Jun 23 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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遍历目录并返回统计目录大小
2014/06/09 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
php实现源代码加密的方法
2015/07/11 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python中unittest用法实例
2014/09/25 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
学术会议欢迎词
2014/01/09 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
酒店中秋节促销方案
2014/01/30 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
热门专业求职信
2014/05/24 职场文书
科学发展观演讲稿
2014/09/11 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书