PHP Laravel学习之HTTP响应,cookie设置,重定向

官网文档传送门:处理用户请求 —— HTTP 响应、重定向


响应

HTTP响应就是服务器在接受到客户端的请求,所作出的一系列回应;

Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串或者数组,框架会自动吧数组转换为一个JSON响应;
例如:

//返回字符串
Route::get('re',function(){
  return 'asb';
});//output:asb
//返回数组
Route::get('re',function(){
  return ['name' => 'zs','age'=>13];
});//outpu:{"name":"zs","age":13}

Response对象

Illuminate\Http\Response实例继承自 Symfony\Component\HttpFoundation\Response 基类,该类提供了一系列方法用于创建 HTTP 响应;

Route::get('re',function(){
 return response ('hello world',200)->header('Content-Type','text/plain');
});//output:hello world,该响应的Content-Type为text/plain

header()函数是添加响应头到响应,withHeaders([])函数添加一个响应头数组到相应

Route::get('re',function(Illuminate\Http\Response $response){
    return $response->withHeaders([
        'Content-Type' => 'html',
        'X-Header-One' => 'Header Value',
        'X-Header-Two' => 'Header Value',
    ]);
});

出现withHeader不存在错误是吧respons引错了
结果如下:


image.png

cookie

添加cookie到响应

return $response->cookie('name','username');

在浏览器中查看结果如下:


cookie

发现name的值是一些无用的字母,是因为Laravel已经对cookie加密了

从请求中取出cookie

$request->cookie('name');

cookie解密
Laravel 框架生成的 Cookie 都经过了加密和签名,以免在客户端被篡改。如果你想要让特定的 Cookie 子集在生成时取消加密,可以通过 app/Http/Middleware 目录下的中间件 App\Http\Middleware\EncryptCookies 提供的 $except 属性来排除这些 Cookie

protected $except = [
        'name',
    ];

排除之后如下:


重定向 redirect()

//重定向到某个url
return redirect('url');
//重定向到上个请求位置
return back();
//重定向到命名路由
return redirect()->route('路由名称');
//通过Eloquent模型 填充参数,传递模型本身,可自动解析id,其实就相当于传递id
return redirect()->route('路由名',[Eloquent模型]);
//重定向到控制器动作
return redirect()->action('PostController@index');
//带一次session数据重定向
return redirect ->()->with('status','Profile update!');

响应宏

如果你想要定义一个自定义的可以在多个路由和控制器中复用的响应,可以使用 Response 门面上的 macro 方法。
创建服务提供者:

php artisan make:provider ResponseMacroServiceProvider

boot方法

public function boot()
    {
        Response::macro('caps', function ($value) {
            return Response::make(strtoupper($value));
        });
    }

注册服务提供者:
config/app.php

.
.
'providers' => [
.
.
App\Providers\ResponseMacroServiceProvider::class,
 ],
.
.

路由

 Route::get('macro/response', function() {
    return response()->caps('LaravelAcademy');
});

访问:http://localhost:8000/macro/response

响应宏其实就是创建以来一个人人都可以调用的响应。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、创建响应 所有路由和控制器都会返回一个被发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应...
    伊Summer阅读 936评论 1 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,076评论 0 12
  • HTTP 响应 基础响应 所有的路由和控制器都应该返回某种响应发送回给用户的浏览器,laravel提供了多种不同的...
    Dearmadman阅读 2,906评论 0 3
  • 今天我来分享 Laravel 中 HTTP 层关于请求、响应与表单验证的知识。 0x00 HTTP 请求 获取请求...
    胖福哥阅读 1,383评论 1 20