激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Laravel框架實現修改登錄和注冊接口數據返回格式的方法

Laravel框架實現修改登錄和注冊接口數據返回格式的方法

2019-09-11 11:05skyisbluening PHP教程

這篇文章主要介紹了Laravel框架實現修改登錄和注冊接口數據返回格式的方法,結合實例形式分析了Laravel框架針對登錄與注冊接口數據操作流程、原理與修改操作實現方法,需要的朋友可以參考下

本文實例講述了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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚州精品国产 | 婷婷久久综合九色综合色多多蜜臀 | 爽爽淫人综合网网站 | 日韩黄在线观看 | 久久成人免费网站 | 91在线视频免费观看 | 久久久久亚洲精品国产 | 成人毛片一区 | 在线看毛片的网站 | 中文日韩欧美 | 激情免费视频 | 一本一道久久久a久久久精品91 | 精品中文字幕在线观看 | 日本在线观看视频网站 | 麻豆视频在线播放 | 亚洲第五色综合网 | 伊人久操视频 | 欧美成年性h版影视中文字幕 | 国产成人精品区一区二区不卡 | 日本特级a一片免费观看 | 黄在线免费看 | 国产一级淫片a级aaa | 国产精品久久久久久久久久久久久久久久 | 国产一级中文字幕 | 久色乳综合思思在线视频 | 搜一级毛片| 欧美精品久久久久久久久老牛影院 | 中文字幕欧美一区二区三区 | 日本不卡二区 | 狠狠干91| 麻豆一二区 | 成人18免费观看 | 亚洲国产在 | 亚洲成人免费影视 | 日韩黄色免费在线观看 | 国产午夜精品理论片a级探花 | 黄色av免费电影 | 国产欧美日韩视频在线观看 | 深夜福利久久久 | 久久久aa| 国产一区二区三区四区波多野结衣 |