国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:05:04
字體:
來源:轉載
供稿:網友

本文實例講述了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的registerpublic 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南陵县| 榆树市| 东平县| 正宁县| 新巴尔虎右旗| 杂多县| 荥经县| 绩溪县| 屏东县| 电白县| 崇礼县| 英山县| 河西区| 海伦市| 若尔盖县| 杭锦后旗| 通化市| 龙川县| 德庆县| 鄢陵县| 仙桃市| 福建省| 横峰县| 绥芬河市| 临猗县| 和田市| 彭州市| 济源市| 蒙城县| 孝义市| 恩施市| 安康市| 蚌埠市| 达孜县| 乌审旗| 五原县| 商洛市| 长泰县| 大兴区| 铜川市| 嘉义县|