Laravel5.1 响应--Response

最基本的HTTP响应只需在路由闭包或控制器动作中返回一个简单字符串即可,但是具体业务逻辑中大部分响应都是在控制器动作中返回Response实例或者视图。Response是继承自 Symfony\Component\HttpFoundation\Response的 Illuminate\Http\Response类的一个实例,我们可以使用该实例上的一系列方法来创建HTTP响应:

Route::get(‘testResponse‘, function (){
    $content = ‘测试response‘;
    $status = 200;
    $value = ‘text/html;charset=utf-8‘;
    $response = new \Illuminate\Http\Response($content,$status);
    return $response->header(‘Content-Type‘, $value);
});

我们可以使用浏览器的开发者工具查看此次响应。

其实为了方便使用,我们可以使用全局帮助函数:

Route::get(‘testResponse‘, function (){
    $content = ‘测试response‘;
    $status = 500;
    $value = ‘text/html;charset=utf-8‘;
    return response($content,$status)->header(‘Content-Type‘,$value);
});

以上代码我们把状态码修改成了500,使用浏览器的开发者工具可以查看头信息,此外我们使用的response()是全局帮助函数,以后我们将默认使用这种方式 它们的效果是一样的,不再生成Response对象实例。

此外,需要注意的是,Illuminate\Http\Response 类中还使用了ResponseTraitheader方法正是该trait提供的,除了header之外,该trait还提供了withCookiecontentstatus方法。

header方法用于设置响应头信息,withCookie方法用于添加cookie,这两个方法都会返回调用它的Response自身对象,所以这两个方法都支持方法链(即多次调用headerwithCookie方法);而contentstatus方法则用于返回当前响应的响应实体内容和响应状态码。

添加cookie

正如上面提到的,我们使用withCookie方法为响应添加cookie,由于headerwithCookie支持方法链,所以我们可以这样使用:

Route::get(‘testResponse‘, function (){
    $content = ‘测试response‘;
    $status = 200;
    $value = ‘text/html;charset=utf-8‘;
    return response($content,$status)->header(‘Content-Type‘,$value)->withCookie(‘site‘,‘addCookie‘);
});

在浏览器工具中可以清楚的看见名为site的cookie被添加了。

如果有需要 可以指定cookie的有效期,作用域信息等:

return response($content,$status)->header(‘Content-Type‘,$value)->withCookie(‘site‘,‘addCookie‘,30,‘/‘,‘test.app‘);

我们可以观察到cookie是加密的,这也是为了安全考虑,如果你不想加密cookie的话 到app/Http/Middleware/EncryptCookies.php文件中将对应的cookie名添加到EncryptCookies类属性$except中即可:

    protected $except = [
        ‘site‘,
    ];

极力反对这样的做法。。。

ResponseFactory

我们在上面所用到的全局帮助函数 response() 方法  当不传入任何参数时 该方法内部会返回一个ResponseFactory给我们,它是Illuminate\Contracts\Routing\ResponseFactory契约的实现。

ResponseFactory提供了非常多的方法来生成丰富的相应类型,如:试图响应,json,文件下载。

视图相应

Route::get(‘testResponse‘, function (){
    $value = ‘text/html;charset=utf-8‘;
    return response()->view(‘hello‘,[‘message‘=>‘我们正在学习response‘])->header(‘Content-Type‘,$value);
});

然后我们只需要创建hello.blade.php文件 将message传入就好了。

如果你不需要自定义响应头的话 直接使用view()这个全局帮助函数会更方便,效果是一样的:

Route::get(‘testResponse‘, function (){
    return view(‘hello‘,[‘message‘=>‘我们正在学习response‘]);
});

Json相应

Route::get(‘testResponse‘, function (){
    return response()->json([‘id‘=>1, ‘name‘=>‘ask‘]);
});

使用浏览器开发者工具查看,根据输出信息可见,json方法会自动设置Content-Typeapplication/json,并调用PHP内置函数json_encode讲数组转化为json格式字符串。

文件下载

Route::get(‘testResponse‘, function (){
    return response()->download(
        realpath(base_path(‘public/images‘)).‘/20150621200925_NMjYu-2.jpeg‘,
        ‘testDownload.jpeg‘
    );
});

RedirectResponse--重定向

重定向我们之前使用过,重定向响应是 Illuminate\Http\RedirectResponse类的实例,我们通常使用全局帮助函数redirect来生成 RedirectResponse实例。和response类似,redirect函数如果接收参数则调用的是Illuminate\Routing\Redirector类的to方法,如果无参调用则返回的是Redirector对象实例。

最基本的重定向

Route::get(‘testRedirect‘, function (){
    return redirect(‘/test‘);
});

Route::get(‘/test‘,function (){
    return ‘测试重定向‘;
});

使用back方法 重定向到上一个位置:

Route::get(‘/back‘, function (){
    return back()->withInput();
});

重定向到路由命名

Route::get(‘testRedirect‘, function (){
    return redirect()->route(‘update‘,[100]);
});

Route::get(‘/articles/update/{id}‘,[‘as‘=>‘update‘, function($id){
    return ‘修改文章‘.$id;
}]);

如果没有参数的话 就不用带参数。

重定向到控制器动作

Route::resource(‘articles‘, ‘ArticlesController‘);

Route::get(‘/testRedirect‘,function(){
    return redirect()->action(‘[email protected]‘);
});

也可以跟上参数:

Route::resource(‘articles‘, ‘ArticlesController‘);

Route::get(‘/testRedirect‘,function(){
    return redirect()->action(‘[email protected]‘,[2]);
});

带一次性session数据的重定向

这种重定向很有用,使用with方法可以携带一次性session数据到重定向请求页面(一次性session数据即使用后立即销毁的session数据项):

Route::resource(‘articles‘, ‘ArticlesController‘);

Route::get(‘/testRedirect‘,function(){
    return redirect()->action(‘[email protected]‘)->with(‘message‘,‘欢迎来到文章列表‘);
});

对应的index方法:

    public function index()
    {
        return view(‘home‘);
    }

home.blade.php中的代码:

@extends(‘app‘)

@section(‘content‘)
    @if(!empty(session(‘message‘)))
        {{session(‘message‘)}}
    @endif
@stop
时间: 2024-12-31 06:25:32

Laravel5.1 响应--Response的相关文章

Java InputStream读取网络响应Response数据的方法!(重要)

原文:Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ====================================================================== 原理讲解 1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     更好的方法是用Inp

分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)

原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ====================================================================== 原理讲解 1. 关于InputStream.read()      在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读

Laravel5.1 响应

上篇笔记刚刚记录完请求 这节就来说说响应,一般来说啊 一个请求对应一个响应,用户都请求咱了 咱必须做一些逻辑后给人家反馈是不是,这就是响应. 1 基本的响应 我们前几篇笔记已经用过很多响应了,其中包括字符串: Route::get('/', function () { return '欢迎欢迎'; }); 注:我们写的是返回简单的字符串,但是Laravel框架会自动把它组成一个响应. 1.1 自定义响应头 Route::get('/', function () { return (new \Il

Servlet深入服务之响应response

HttpServletResponse与HttpServletRequestWeb服务器收到哭护短的http请求时,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象,获取客户机提交过来的数据,只需要找到request对象即可,要向客户机输出数据只需要找到response对象即可,HTTP请求时,对应的对象是HttpServletRequest封装请求数据,HTTP响应的时候对应的对象是HttpServletResponse封装响应数据. HttpSe

Laravel表单篇----request请求,session存储,response响应以及中间件

请求Request 取值(传入参数Request $request) $request -> input('name');(请求name值) $request -> input('sex', '未知');(也可以请求未被定义的参数) $request -> all();(得到所有请求值) 判断取值类型 $request -> method();(判断请求类型) $request -> isMethod('GET');(判断是否为get请求) $request -> aj

flask基础之Response响应对象(九)

前言 Response对象负责对客户端的响应,每一个请求都会有一个Response对象,那么它在一个请求的声明周期内是怎么发挥作用的呢? Response对象 响应发生的位置 先回顾一下http请求的flask处理流程: 接收请求-->创建请求上下文-->请求上下文入栈-->创建该请求的应用上下文-->应用上下文入栈-->调用视图函数处理逻辑-->请求上下文出栈-->应用上下文出栈 Response对象在调用视图函数处理逻辑后就被创建,但是对客户端的响应在应用上下

asp.net core 系列之Performance的 Response compression(响应压缩)

本文,帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正). 什么是响应压缩?响应压缩简单的说就是为了减少网络带宽,而把返回的响应压缩,使之体积缩小,从而加快响应的一种技术(个人理解) 网络带宽是有限的资源.减少响应(response)的大小通常可以增加应用的响应性(即减少响应的大小可以加快响应的速度),这是很引人注目的(often dramatically).压缩(压缩compress)应用的响应可以减少装载的大小. 当使用响应压缩中间件时(Response

JavaWeb的学习--Response

1.HttpServletResponse概述 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response. service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大,今天

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他