宏的概念
計算機裏的宏是批量處理的意思。好比咱們在進行文本編輯的時候,打錯字會有回退的功能——control+z;可是這是咱們的鍵盤操做,計算機在進行處理的時候是不能理解的,他必須對最近兩次操做進行比對,而後撤銷最近一次操做的修改,而後展現文本。計算機雖然不理解control+z是什麼意思,可是必定有一個預約義是在他遇到control+z的時候進行上述的操做。這種根據預約義的規則對頻繁使用的一系列命令和序列轉換成對應的輸出(面對計算機)的定義叫作叫作宏。這種替換通常都在預編譯的時候進行,稱爲宏展開;其實windows的圖形界面交互就是頻繁的使用宏,進行一系列的計算機操做,這一點相似封裝,對頻繁使用的操做封裝成函數,使用時直接輸入簡短的函數名和參數,服務器就自動完成一些列的操做;php
lavarel 的響應宏
在編程的過程當中可能常常用到一些特定的響應,這時候咱們須要自定義響應宏把這些頻繁的操做封裝起來,再次使用的時候直接調用;
(1)須要在\App\Providers
文件夾下新建一個服務提供者相似ResponseServiceProvider:前端
<?php namespace App\Providers; use Illuminate\Support\Facades\Response; use Illuminate\Support\ServiceProvider; class ResponseServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { Response::macro('upper', function ($value) { return Response::make(strtoupper($value)); }); }
(2)macro方法接受的第一個參數就是定義的響應名稱,第二個參數是一個閉包函數,響應宏的閉包在 ResponseFactory 實現類或輔助函數 response 中調用宏名稱的時候被執行:ajax
Route::get('upper/response', function() { return response()->upper('ppsty'); });
這樣返回的響應就是響應宏處理後的結果;編程
3.若是咱們在與前端的交互種須要特定的響應數據,
好比json格式的數據:
{'isError'=>true,'isSuccess'=>false,'error'=>$error,'code'=> $code,'data'=>[],}
(1)這樣咱們就須要對響應進行格式封裝:json
<?php namespace App\Providers; use Illuminate\Support\Facades\Response; use App\Services\AjaxResponse; use Illuminate\Support\ServiceProvider; class ResponseServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { Response::macro('toBeJson', function ($msg = [], $code = 200, $sStatus = 200, array $xHeaders = [], $sOptions = 0) { return response()->json(AjaxResponse::ajax($msg, $code), $sStatus, $xHeaders, $sOptions); }); } }
(2)對格式的操做須要新建一個AjaxResponse,把對格式的規範寫到裏面:windows
class AjaxResponse { public static function toBeJson($msg, $code = 400) { return [ 'isError' => false, 'isSuccess'=> true, 'msg' => $msg, 'code' => $code, 'data' => [], ]; } }
這樣返回的就是規範以後的響應返回;服務器
https://blog.csdn.net/weixin_38674371/article/details/78459277?locationNum=1&fps=1markdown