응답
ㅠㅠ
- 응답 헤더 추가
- 응답에 쿠키 추가
- 쿠키 및 암호화
- Redirect
- 이름이 지정된 경로로 리디렉션
- Eloquent 모델을 통해 매개변수 채우기
- 컨트롤로 이동 작업
- 외부 도메인 이름으로 이동
- 스트림 다운로드
- 파일 응답
- 응답 매크로
HTTP 응답
Route::get('/', function () { return 'Hello World'; });
경로나 컨트롤러에서 문자열을 반환하는 것 외에도 배열을 반환할 수도 있습니다. 프레임워크는 자동으로 배열을 JSON 응답으로 변환합니다:Route::get('/', function () { return [1, 2, 3]; });
{tip} 경로나 컨트롤러에서 Eloquent 컬렉션을 반환할 수도 있다는 것을 알고 계셨나요? 또한 자동으로 JSON 응답으로 변환됩니다.
Response 객체일반적으로 라우팅 작업에서 단순히 문자열과 배열을 반환하지 않습니다. 대부분의 경우 완전한IlluminateHttpResponse
인스턴스 또는 뷰가 반환됩니다.IlluminateHttpResponse
实例或 视图。返回完整的
Response
实例允许你自定义响应的 HTTP 状态码和响应头信息。Response
实例 继承自SymfonyComponentHttpFoundationResponse
类, 该类提供了各种构建 HTTP 响应的方法:Route::get('home', 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
응답의 HTTP 상태 코드와 응답 헤더 정보를 사용자 정의할 수 있는 완전한Response
인스턴스를 반환합니다.Response
인스턴스는 HTTP 응답 구성을 위한 다양한 메서드를 제공하는SymfonyComponentHttpFoundationResponse
클래스에서 상속됩니다.return response($content) ->withHeaders([ 'Content-Type' => $type, 'X-Header-One' => 'Header Value', 'X-Header-Two' => 'Header Value', ]);
응답 헤더 추가🎜대부분의 응답 메서드는 연결 가능하므로 응답 인스턴스 생성 프로세스를 더 쉽게 읽을 수 있습니다. 예를 들어header
메서드를 사용하면 응답이 사용자에게 반환되기 전에 일련의 헤더 정보를 응답에 추가할 수 있습니다. 🎜Route::middleware('cache.headers:public;max_age=2628000;etag')->group(function() { Route::get('privacy', function () { // ... }); Route::get('terms', function () { // ... }); });
🎜 또는withHeaders
응답에 헤더 정보 배열을 추가할 항목을 지정하는 방법: 🎜return response($content) ->header('Content-Type', $type) ->cookie('name', 'value', $minutes);
🎜🎜🎜🎜🎜🎜캐시 제어 미들웨어
Laravel에는 라우팅 그룹에 대한
Cache-Control
헤더 정보를 빠르게 설정하는 데 사용할 수 있는 내장cache.headers
미들웨어가 있습니다.etag
가 지시문 세트에 선언된 경우 Laravel은 자동으로 ETag 식별자를 응답 콘텐츠의 MD5 해시로 설정합니다:cache.headers
中间件,可以用来快速地为路由组设置Cache-Control
头信息。如果在指令集中声明了etag
,Laravel 会自动将 ETag 标识符设置为响应内容的 MD5 哈希值:->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
添加 Cookies 到响应
你可以使用响应上的
cookie
方法轻松地将为响应增加 Cookies。例如,你可以像这样使用cookie
方法生成一个 cookie 并轻松地将其附加到响应上:Cookie::queue(Cookie::make('name', 'value', $minutes)); Cookie::queue('name', 'value', $minutes);
cookie
方法还接受一些不太频繁使用的参数。通常,这些参数与原生 PHP 的 setcookie 方法的参数有着相同的目的和含义:/** * 不需要被加密的cookies名称 * * @var array */ protected $except = [ 'cookie_name', ];
或者,你可以使用
Cookie
facade 「队列」,Cookie
以附加到应用程序的传出响应。queue
方法接受一个Cookie
实例或创建Cookie
实例所需的参数。 这些 cookie 在发送到浏览器之前会附加到传出响应中:Route::get('dashboard', function () { return redirect('home/dashboard'); });
Cookies & 加密
默认情况下,Laravel 生成的所有 Cookie 都是经过加密和签名,因此不能被客户端修改或读取。 如果你想要应用程序生成的部分 Cookie 不被加密,那么可以使用在
app/Http/Middleware
目录中AppHttpMiddlewareEncryptCookies
中间件的$except
属性:Route::post('user/profile', function () { //验证请求 return back()->withInput(); });
重定向
重定向响应是
IlluminateHttpRedirectResponse
类的实例,并且包含用户需要重定向至另一个 URL 所需的头信息。Laravel 提供了几种方法用于生成RedirectResponse
实例。其中最简单的方法是使用全局辅助函数redirect
:return redirect()->route('login');
有时候你可能希望将用户重定向到之前的位置,比如提交的表单无效时。这时你可以使用全局辅助函数
back
来执行此操作。由于这个功能利用了 会话控制,请确保调用back
函数的路由使用web
// 对于具有以下 URI 的路由: profile/{id} return redirect()->route('profile', ['id' => 1]);
응답에 쿠키 추가응답의cookie
메소드를 사용하여 응답에 쿠키를 쉽게 추가할 수 있습니다. 예를 들어, 다음과 같이cookie
메서드를 사용하여 쿠키를 생성하고 이를 응답에 쉽게 첨부할 수 있습니다. 🎜//对于具有以下 URI 的路由: profile/{id} return redirect()->route('profile', [$user]);
🎜cookie
메서드는 자주 사용되지 않는 일부 매개변수도 허용합니다. 일반적으로 이러한 매개변수는 기본 PHP setcookie 메소드의 매개변수와 동일한 목적과 의미를 갖습니다. 🎜/** * 获取模型的路由键 * * @return mixed */ public function getRouteKey(){ return $this->slug; }
🎜 또는Cookie
파사드 "queue",Cookie
를 사용할 수도 있습니다. 애플리케이션에 나가는 응답을 추가합니다.queue
메소드는Cookie
인스턴스 또는Cookie
인스턴스를 생성하는 데 필요한 매개변수를 허용합니다. 이러한 쿠키는 브라우저로 전송되기 전에 발신 응답에 추가됩니다. 🎜return redirect()->action('HomeController@index');
🎜🎜🎜🎜🎜 쿠키 & 암호화🎜🎜기본적으로 Laravel에서 생성된 모든 쿠키는 암호화되고 서명되므로 클라이언트가 수정하거나 읽을 수 없습니다. 애플리케이션에서 생성된 일부 쿠키를 암호화하지 않으려면app/Http/Middleware
디렉터리의$out
미들웨어를 사용할 수 있습니다. 🎜🎜🎜🎜리디렉션
🎜리디렉션 응답은IlluminateHttpRedirectResponse의 인스턴스입니다. code> 클래스에는 사용자를 다른 URL로 리디렉션하는 데 필요한 헤더 정보가 포함되어 있습니다. Laravel은
RedirectResponse
인스턴스를 생성하기 위한 여러 가지 방법을 제공합니다. 가장 간단한 방법은 전역 도우미 기능인redirect
를 사용하는 것입니다. 🎜return redirect()->action( 'UserController@profile', ['id' => 1] );
🎜 때로는 제출된 양식이 유효하지 않은 경우와 같이 사용자를 이전 위치로 리디렉션하고 싶을 수도 있습니다. 그런 다음 전역 도우미 함수back
을 사용하여 이 작업을 수행할 수 있습니다. 이 기능은 세션 제어를 활용하므로back
함수를 호출하는 경로가web
미들웨어 그룹 또는 모든 세션 미들웨어를 사용하는지 확인하세요. 🎜return redirect()->away('https://www.google.com');
🎜🎜🎜🎜🎜🎜이름이 지정된 경로로 리디렉션
도우미 함수
redirect
가 매개변수 없이 호출되면IlluminateRoutingRedirector
인스턴스가 반환됩니다. 이 인스턴스를 사용하면리디렉터
에서 모든 메서드를 호출할 수 있습니다. 예를 들어 명명된 경로에 대해RedirectResponse
를 생성하려면route
메서드를 사용할 수 있습니다.redirect
时,会返回IlluminateRoutingRedirector
实例。这个实例允许你调用Redirector
上的任何方法。例如为命名路由生成RedirectResponse
,可以使用route
方法:Route::post('user/profile', function () { // Update the user's profile... return redirect('dashboard')->with('status', 'Profile updated!'); });
如果路由中有参数,可以将其作为第二个参数传递到
route
方法:@if (session('status')) <div class="alert alert-success"> {{ session('status') }} </div> @endif
通过 Eloquent 模型填充参数
如果你要重定向到使用从 Eloquent 模型填充「ID」参数的路由,可以简单地传递模型本身。ID 会被自动提取:
return response() ->view('hello', $data, 200) ->header('Content-Type', $type);
如果你想要自定义这个路由参数中的默认参数名,需要重写模型实例上的
getRouteKey
方法:return response()->json([ 'name' => 'Abigail', 'state' => 'CA' ]);
跳转到控制器 Action
还可以生成到 controller action 的跳转。要达到这个目的,只要把 控制器 和 action 的名称传递给
action
方法。记住,不需要传递控制器的全部命名空间,Laravel 的RouteServiceProvider
会自动将其设置为基本控制器的命名空间:return response() ->json(['name' => 'Abigail', 'state' => 'CA']) ->withCallback($request->input('callback'));
如果控制器路由需要参数,可以将其作为
action
方法的第二个参数:return response()->download($pathToFile); return response()->download($pathToFile, $name, $headers); return response()->download($pathToFile)->deleteFileAfterSend();
跳转到外部域名
有时候你需要跳转到应用外的域名。调用
away
方法可以达到此目的,它会创建一个不带有任何额外的 URL 编码、有效性校验和检查的RedirectResponse
实例:return response()->streamDownload(function () { echo GitHub::api('repo') ->contents() ->readme('laravel', 'laravel')['contents']; }, 'laravel-readme.md');
带有传送 Session 值的跳转
跳转到新的 URL 的同时 传送数据给 session 是很常见的。 通常会在成功执行一个动作并传送消息给 session 之后这样做。为了方便起见,你可以创建一个
RedirectResponse
实例并在链式方法调用中将数据传送给 session :return response()->file($pathToFile); return response()->file($pathToFile, $headers);
在用户跳转后,可以显示 session 中的传送数据。比如使用 Blade syntax :
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Response; class ResponseMacroServiceProvider extends ServiceProvider{ /** * 注册应用程序的响应宏 * * @return void */ public function boot() { Response::macro('caps', function ($value) { return Response::make(strtoupper($value)); }); } }
其它的响应类型
response
助手可以用于生成其它类型的响应实例。当还带参数调用response
助手时,返回IlluminateContractsRoutingResponseFactory
return response()->caps('foo');
경로에 매개변수가 있는 경우 해당 매개변수를 두 번째로 전달할 수 있습니다.route
방법에 대한 매개변수:rrreee
Eloquent 모델을 통해 매개변수 채우기
사용하도록 리디렉션하려는 경우 Eloquent 모델에서 채워진 "ID" 매개변수 라우팅의 경우 모델 자체를 전달하면 됩니다. ID가 자동으로 추출됩니다. rrreee이 경로 매개변수의 기본 매개변수 이름을 맞춤설정하려면 모델 인스턴스의rrreee🎜🎜🎜getRouteKey
메서드를 재정의해야 합니다.🎜🎜컨트롤러 액션으로 점프🎜🎜컨트롤러 액션으로 점프를 생성할 수도 있습니다. 이렇게 하려면 컨트롤러와 작업 이름을action
메서드에 전달하면 됩니다. 기억하세요, 컨트롤러의 전체 네임스페이스를 전달할 필요는 없습니다. Laravel의RouteServiceProvider
는 자동으로 이를 기본 컨트롤러의 네임스페이스로 설정합니다: 🎜rrreee🎜컨트롤러 경로에 매개변수가 필요한 경우, 다음을 전달할 수 있습니다.action
메소드의 두 번째 매개변수: 🎜rrreee🎜🎜🎜🎜 🎜jump 외부 도메인으로 이동 🎜🎜 앱 외부 도메인으로 이동해야 하는 경우가 있습니다. 이는 추가 URL 인코딩, 유효성 체크섬 검사 없이RedirectResponse
인스턴스를 생성하는away
메서드를 호출하여 수행됩니다. 🎜rrreee🎜🎜🎜🎜🎜이전된 세션 값으로 점프🎜🎜새 URL로 점프 동시에 세션에 데이터를 보내는 것은 매우 일반적입니다 시간. 이는 일반적으로 작업을 성공적으로 수행하고 세션에 메시지를 보낸 후에 수행됩니다. 편의를 위해RedirectResponse
인스턴스를 생성하고 연결된 메서드 호출을 통해 데이터를 세션으로 전송할 수 있습니다. 🎜rrreee🎜사용자가 점프한 후 세션에서 전송된 데이터가 표시될 수 있습니다. 예를 들어 블레이드 구문을 사용합니다. 🎜rrreee🎜🎜🎜🎜기타 응답 유형
🎜응답
도우미를 사용하여 다른 유형의 응답 인스턴스를 생성할 수 있습니다.response
도우미가 인수와 함께 호출되면IlluminateContractsRoutingResponseFactory
계약의 구현을 반환합니다. 이 계약은 응답을 생성하는 여러 가지 방법을 제공합니다: 🎜🎜🎜🎜🎜🎜🎜응답 보기
응답 상태 및 헤더 정보를 제어하면서 보기를 응답 콘텐츠로 반환해야 하는 경우
rrreeeview
메서드를 호출해야 합니다.view
方法:如果不需要传递自定义的 HTTP 状态码和自定义头信息,还可以使用全局的
view
辅助函数。JSON 响应
rrreeejson
自动将Content-Type
头信息设置为application/json
,同时使用 PHP 的json_encode
函数将给定的数组转换为 JSON :如果想要创建 JSONP 响应,可以结合
rrreeewithCallback
方法使用json
方法:文件下载
rrreeedownload
方法可以用于生成强制用户浏览器下载给定路径文件的响应。download
方法文件名作为其第二个参数,它将作为用户下载文件的文件名。最后,你可以传递 HTTP 头信息数组作为其第三个参数:{note} 用于管理文件下载的 Symfony HttpFoundation 要求下载的文件有一个 ASCII 文件名。
流下载
有时,你可能希望将给定操作的字符串响应转换为下载响应,而不需要将其写入磁盘。此时可以使用
rrreeestreamDownload
方法。这个方法接受回调、文件名和可选的头信息数组作为参数:文件响应
rrreeefile
方法用于直接在用户浏览器显示一个图片或 PDF 之类的文件,而不是下载。这个方法接受文件路径作为第一个参数,头信息数组作为第二个参数:响应宏
如果你想要定义一个自定义的可以在多个路由和控制器中复用的响应,可以使用
rrreeeResponse
门面上的macro
方法。例如,在某个 服务提供者 的boot
方法编写如下代码:
사용자 정의 HTTP 상태 코드 및 헤더 정보를 사용자 정의하기 위해 전역macro
方法接受一个名称作为第一个参数,闭包函数作为的第二个参数。响应宏的闭包在ResponseFactory
实现类或辅助函数response
rrreee보기
도우미 기능을 사용할 수도 있습니다. 🎜JSON response🎜🎜json
은Content-를 자동으로 변환합니다. Type
헤더 정보는application/json
으로 설정되며 PHP의json_encode
함수를 사용하여 주어진 배열을 JSON으로 변환합니다. 🎜rrreee🎜만들고 싶다면 JSONP 응답,withCallback
메서드와 함께json
메서드를 사용할 수 있습니다: 🎜rrreee🎜🎜🎜🎜🎜File Download🎜🎜download
메서드를 사용하면 사용자 브라우저가 지정된 경로에서 파일을 다운로드하도록 하는 응답을 생성할 수 있습니다.download
메소드는 파일 이름을 두 번째 매개변수로 사용하며, 이는 사용자가 다운로드한 파일의 파일 이름으로 사용됩니다. 마지막으로 HTTP 헤더 배열을 세 번째 매개변수로 전달할 수 있습니다. 🎜rrreee🎜{note} 파일 다운로드를 관리하는 데 사용되는 Symfony HttpFoundation에서는 다운로드한 파일에 ASCII 파일 이름이 있어야 합니다. 🎜
🎜스트리밍 다운로드
🎜때때로 특정 작업의 문자열 응답을 다운로드 응답으로 변환하고 싶을 수도 있습니다. 디스크에 쓸 필요가 없습니다. 이때streamDownload
메소드를 사용할 수 있습니다. 이 메소드는 콜백, 파일 이름 및 선택적 헤더 배열을 매개변수로 허용합니다: 🎜rrreee🎜🎜🎜🎜 🎜파일 응답 🎜🎜file
메소드는 이미지나 PDF 등의 파일을 다운로드하는 대신 사용자의 브라우저에 직접 표시하는 데 사용됩니다. 이 메소드는 파일 경로를 첫 번째 매개변수로, 헤더 정보 배열을 두 번째 매개변수로 받아들입니다: 🎜rrreee🎜🎜🎜🎜응답 매크로
🎜여러 경로와 컨트롤러에서 재사용할 수 있는 사용자 정의 응답을 정의하려면응답
Facade 매크로에서를 사용할 수 있습니다 코드> 방법. 예를 들어 서비스 공급자의
boot
메소드에 다음 코드를 작성합니다. 🎜rrreee🎜macro
메소드는 이름을 첫 번째 매개변수로 받아들이고 클로저 함수를 두 번째 매개변수. 응답 매크로의 폐쇄는ResponseFactory
구현 클래스 또는 도우미 함수response
에서 매크로 이름이 호출될 때 실행됩니다. 🎜rrreee🎜이 기사는 🎜에 처음 게시되었습니다. LearnKu.com🎜 웹사이트 . 🎜🎜
- 캐시 제어 미들웨어