1. 宏的概念
    计算机里的宏是批量处理的意思。比如我们在进行文本编辑的时候,打错字会有回退的功能——control+z;但是这是我们的键盘操作,计算机在进行处理的时候是不能理解的,他必须对最近两次操作进行比对,然后撤销最近一次操作的修改,然后展示文本。计算机虽然不理解control+z是什么意思,但是一定有一个预定义是在他遇到control+z的时候进行上述的操作。这种根据预定义的规则对频繁使用的一系列命令和序列转换成对应的输出(面对计算机)的定义叫做叫做宏。这种替换一般都在预编译的时候进行,称为宏展开;其实windows的图形界面交互就是频繁的使用宏,进行一系列的计算机操作,这一点类似封装,对频繁使用的操作封装成函数,使用时直接输入简短的函数名和参数,服务器就自动完成一些列的操作;

  2. 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 中调用宏名称的时候被执行:

Route::get('upper/response', function() {
return response()->upper('ppsty');
});

这样返回的响应就是响应宏处理后的结果;

3.如果我们在与前端的交互种需要特定的响应数据,
比如json格式的数据:
{'isError'=>true,'isSuccess'=>false,'error'=>$error,'code'=> $code,'data'=>[],}
(1)这样我们就需要对响应进行格式封装:

<?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,把对格式的规范写到里面:

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=1

lavarel 响应宏的更多相关文章

  1. lumen 响应宏

    响应宏 laravel 中的响应宏,说明文档中有,lumen的没有找到.于是参考laravel 项目中的响应宏写了个Lumen的 1. 新建文件 App\Providers\ResponseMacro ...

  2. HTTP层 —— 响应

    1.创建响应 字符串&数组 所有路由和控制器都会返回一个被发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串,框架会将这 ...

  3. laravel基础课程---8、laravel响应和视图(响应是什么)

    laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...

  4. Laravel5.1学习笔记6 响应

    基本响应 附加头信息到响应 附加Cookie到响应 其他响应 View视图响应 JSON响应 File下载 重定向 重定向到命名路由 重定向到控制器Action 附带闪回Session数据重定向 响应 ...

  5. legend3---3、lavarel页面post请求错误之后跳转

    legend3---3.lavarel页面post请求错误之后跳转 一.总结 一句话总结: 控制器:return back()->withInput()->with('error','验证 ...

  6. MFC绘图

    //20171/121 两点一线 比如鼠标左击和鼠标弹起的两个消息 然后响应从而获取一条线2 添加响应函数方法 类图->右击->addwindowsmessage3 Dview和main中 ...

  7. laravel中用到的ServiceProvide

    路由 全局限制 如果你希望路由参数可以总是遵循正则表达式,则可以使用 pattern 方法.你应该在 RouteServiceProvider 的 boot 方法里定义这些模式: 1 2 3 4 5 ...

  8. 黑马lavarel教程---11、响应处理

    黑马lavarel教程---11.响应处理 一.总结 一句话总结: 如果在昂扬状态,看学习视频和运动时间重合,会很舒服 1.jquery的$.post参数为什么不需要占位? 因为每个参数的类型不同,可 ...

  9. iOS开发--Swift RAC响应式编程初探

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...

随机推荐

  1. python 中初始化二维数组的方法

    最好的方法是: 初始化4*3的二维数组 a = [[0 for col in xrange(3)] for row in xrange(4)] 而不可以用: a = [[0]*3]*4 [0]*3是生 ...

  2. NodeJS概述2-事件插件-简易爬虫

    事件 events 模块 原生事件写法 /* * 1. 事件分类 * DOM0级 事件 - on + eventType * DOM2级 事件 - 事件监听 * 2. 事件构成部分有哪些? dom.o ...

  3. Ajax.dll使用方法和步骤(比较方便的实现ajax)

    转载自   博客频道 - CSDN.NET http://blog.csdn.net/houhanxin1/article/details/6671470 1. 有直接用框架的:Ajaxpro和Aja ...

  4. Floyd算法模板--详解

    对于无权的图来说: 若从一顶点到另一顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1. 由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同 ...

  5. 【Mobius绮丽的辗转】莫比乌斯反演

    Problem 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 1≤n≤50000,1≤a≤b≤5 ...

  6. 【JZOJ4923】【NOIP2017提高组模拟12.17】巧克力狂欢

    题目描述 Alice和Bob有一棵树(无根.无向),在第i个点上有ai个巧克力.首先,两人个选择一个起点(不同的),获得点上的巧克力:接着两人轮流操作(Alice先),操作的定义是:在树上找一个两人都 ...

  7. Hibernate→ 《Hibernate程序开发》教材大纲

    Hibernate ORM 概览 Hibernate 简介 Hibernate 架构 Hibernate 环境 Hibernate 配置 Hibernate 会话 Hibernate 持久化类 Hib ...

  8. orm1.0

    class Field: def __init__(self,name,column_type,primary_key,defaule): self.name = name self.column_t ...

  9. 【转载】CPU相关总结

    What is the difference between Processor, Core, Logical Processor ? Processor : It’s the physical co ...

  10. firefox扩展开发(二):用XUL创建窗口控件

    firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...