Laravel 5.5是如何创建响应的?可能很多人不是很清楚,那么,接下来我将为大家介绍一下关于Laravel 5.5创建一个http响应的方法以及介绍一下其他的响应类型。
创建响应
字符串 & 数组
所有的路由和控制器处理完业务逻辑之后都会返回一个发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串,框架会自动将这个字符串转化为一个完整的 HTTP 响应。
Route::get('/', function () { return 'Hello World';});
除了从路由或控制器返回字符串之外,还可以返回数组。框架会自动将数组转化为一个 JSON 响应。
Route::get('/', function () { return [1, 2, 3];});
注:还可以从路由或控制器返回 Eloquent 集合,这也会被自动转化为 JSON 响应。
Response 对象
通常,我们并不只是从路由简单返回字符串或数组,大多数情况下,都会返回一个完整的 Illuminate\Http\Response 实例或视图。
返回一个完整的 Response 实例允许你自定义响应的 HTTP 状态码和头信息。Response 实例继承自 Symfony\Component\HttpFoundation\Response 基类,该类提供了一系列方法用于创建 HTTP 响应。
Route::get('/', function () { return response('Hello World', 200) ->header('Content-Type', 'text/plain');});
添加响应头
大部分响应方法都可以以方法链的形式调用,从而可以流式构建响应(流接口模式)。例如,在发送响应给用户前可以使用 header 方法来添加一系列响应头。
return response($content) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value');
或者你可以使用 withHeaders 方法来指定头信息数组添加到响应。
return response($content) ->withHeaders([ 'Content-Type' => $type, 'X-Header-One' => 'Header Value', 'X-Header-Two' => 'Header Value', ]);
添加 Cookie 到响应
使用响应实例上的 cookie 方法可以轻松添加 Cookie 到响应。例如,你可以使用 cookie 方法生成 Cookie 并将其添加到响应实例。
return response($content) ->header('Content-Type', $type) ->cookie('name', 'value', $minutes);
cookie 方法还可以接收更多使用频率较低的额外可选参数,一般来说,这些参数和 PHP 原生提供的 setcookie 方法目的和意义差不多。
->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
此外,还可以使用 Cookie 门面以”队列”形式将 Cookie 添加到响应。queue 方法接收 Cookie 实例或创建 Cookie 所必要的参数作为参数,这些 Cookie 会在响应被发送到浏览器之前添加到响应。
Route::get('cookie/response', function() { Cookie::queue(Cookie::make('site', 'www.baidu.com',1)); Cookie::queue('author', 'admin', 1); return response('Hello Laravel', 200) ->header('Content-Type', 'text/plain');});
在浏览器中访问 http://www.adm.devp/cookie/response ,就可以看到这两%本文来源gaodai#ma#com搞*代#码9网#搞gaodaima代码个新增的 cookie 。
Cookie 加密
默认情况下,Laravel 框架生成的 Cookie 都经过了加密和签名,以免在客户端被篡改。如果你想要让特定的 Cookie 子集在生成时取消加密,可以通过 app/Http/Middleware 目录下的中间件 App\Http\Middleware\EncryptCookies 提供的 $except 属性来排除这些 Cookie。
/** * 不需要被加密的cookies名称 * * @var array */protected $except = [ 'cookie_name',];