多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## laravel 内置默认支持宏扩展的类有哪些? * Response                          响应类 * Request                             请求类 * Collection                           数据集 * HTML                                 HTML扩展类 * Form                                  表单扩展类 * Filesystem                         资源文件 * Cache                                缓存操作类 * Str                                字符串操作类 * Arr                                     数组操作类 * Translator                          翻译器(多语言版本开发) * Database-Builder              数据库连接操作类 * ... 我们在使用 laravel 来写 API 时,经常需要返回一个 json 字符串或 JsonResponse,通常我们的做法可能有两种。 1、在 BaseController 中定义一个返回 Json 响应 de 方法,然后继承该 BaseController。如: ``` //BaseController.php public function json($data = null, $status = 200, $headers = [], $options = 0) { return new JsonResponse($data, $status, $headers, $options); } //YourController.php class YourController extends BaseController { public function users(UserRepository $userRepository) { return $this->json($userRepository->allUser()); } } ``` 然而这写法确实挺方便,然而当你在其他地方需要使用到 Json 响应时(如中间件验证失败时你想要返回一个 Json 响应)。你无法使用到 $this->json(...)。 2、直接在需要用到 Json 响应得地方使用 return new JsonResponse 或者使用 Response Facade。 但这种做法当需要修改 Response 响应时得全部改动,不可取。 Response 宏 Laravel 提供了一个非常方便的响应宏来处理这一情况 首先,我们需要先注册一个响应宏,在任意一个 ServiceProvider 的 boot 方法里(ResponseMacroServiceProvider),使用 Response Facade 注册 ``` Response::macro('success', function ($data = [], $message = 'success') { return new JsonResponse([ 'code' => 0, 'data' => $data, 'message' => $message ], 200); }); ``` 接下来, 你可以再任何地方使用它 response()。 ``` public function users(UserRepository $userRepository) { return response()->success($userRepository->all(), 'success'); } ``` 原文地址:[https://learnku.com/articles/5139/laravel-response-macro-principle](https://learnku.com/articles/5139/laravel-response-macro-principle)