laravel基础教程 -- 响应
HTTP 响应
基础响应
所有的路由和控制器都应该返回某种响应发送回给用户的浏览器,laravel提供了多种不同的方式来返回响应。最基本的响应就是简单的在路由或控制器中返回字符串:
Route::get('/', function () { return 'Hello World';});
这里返回的字符串会被laravel自动的转换为HTTP响应发送出去.
响应对象
大多数时候,路由或者控制器的行为都应该返回Illuminate\Http\Response实例或者view。Response实例允许你便利的对响应头和响应的状态进行定制化.一个Response实例继承自Symfony\Component\HttpFoundation\Response类,该类提供了多种方法来生成一个HTTP响应:
use Illuminate\Http\Response;Route::get('home', function () { return (new Response($content, $status)) ->header('Content-Type', $value); });
laravel也提供了便利的response全局帮助函数:
Route::get('home', function () { return response($content, $status) ->header('Content-Type', $value);});
所有可以使用的Response实例的方法,你可以查看 API 文档 和 Symfony API文档.
附加响应头
Response实例的大多数方法都是允许进行链式调用的,你可以使用链式调用来流利的构建响应。例如,你可以使用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到响应
Response实例的cookie可以简单的追加cookie信息到响应。例如,你可以使用cookie方法来生成cookie并附加到响应中:
return response($content) ->header('Content-Type', $type) ->cookie('name', 'value');
cookie方法允许你添加额外的参数来进一步定制化你的cookie属性:
->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
默认的,laravel中所有的cookie都是经过签证加密的,所以客户端的用户是没办法修改或者解读的.所以如果你想在生成某些cookie时,禁用默认的加密,你需要在App\Http\Middleware\EncreyptCookies中间件的$except属性中进行追加:
protected $except = [ 'cookie_name'];
其它响应类型
帮助方法response也可以用来便利的生成其它类型的响应实例,如果你使用response帮助方法不传递任何参数,那么它会返回一个实现了Illuminate\Contracts\Routing\ResponseFactory contract的实例。该契约提供了多种有用的方法来生成响应.
视图响应
如果你想控制响应的响应头与状态,并且你也需要返回一个视图作为响应的内容,那么你可以使用view方法:
return response() ->view('hello', $data) ->header('Content-Type', $type);
当然,如果你并不需要定制化响应的状态或者响应头,那么你可以直接使用全局帮助方法view。
JSON响应
json方法会自动的设置响应头的Content-Type为application/json,以及使用json_encode方法将提供的数组转换为JSON:
return response()->json(['name' => 'Abigail', 'state' => 'CA']);
如果你想要生成jsonp的响应,那么你可以使用json方法然后附加setCallback方法:
return response() ->json(['name' => 'Abigail', 'state' => 'CA']) ->setCallback($request->input('callback'));
文件下载
download方法可以在返回一个强制用户端浏览器进行下载指定路径文件的响应。download方法也允许传递第二个参数作为浏览器下载时的文件名,你也可以传递http响应头数组作为第三个参数:
return response()->download($pathToFile);return response()->download($pathToFile, $name, $headers);
注意:Symfony HttpFoundation需要被下载的文件有一个ASCII文件名
文件响应
file方法允许你在浏览器直接显示image或pdf类型的文件来代替直接下载。该方法接收文件路径作为第一个参数,也可以接收HTTP响应头数组作为第二个参数:
return response()->file($pathToFile);return response()->file($pathToFile, $headers);
重定向
重定向响应是一个Illuminate\Http\RedirectResponse类的实例,它包含了所有重定向到指定URI所需要的响应头信息。laravel提供了多种方式去生成重定向实例.最简单的方式莫过于使用全局帮助方法redirect:
Route::get('dashboard', function () { return redirect('home/dashboard'); });
有时候你需要将用户重定向到上一次请求的地址,那么你可以使用全局帮助方法back。因为这里用到了session,所以你必须要保证你的路由使用了session中间件,默认的laravel的路由都被包裹在web路由组中,web中间件组中已经包含了session中间件:
Route::post('user/profile', function () { // Validate the request... return back()->withInput();});
重定向至命名路由
当你使用redirect方法而不传递任何参数时,laravel将返回Illuminated\Routing\Redirector的一个实例,该实例允许你使用一些方法来处理重定向信息,例如,为了生成重定向到命名路由,你可以使用route方法:
return redirect()->route('login');
如果命名路由也含有参数,那么你可以传递第二个参数到route方法:
return redirect()->route('profile', ['id' => 1]);
如果你需要重定向的路由是使用Eloquent模型的id作为参数识别的路由,那么你可以直接在route方法中传递用户实例,它会自动被解析到id:
return redirect()->route('profile', [$user]);
重定向至控制器行为
你也可以生成重定向信息到控制器的某个行为.你可以简单的通过action方法传递控制器名称和控制器行为来做到这些.你应该注意,你并不需要特别的指出控制器的全部命名空间,因为laravel的RouteServiceProvider已经自动的设置了默认的命名空间:
return redirect()->action('HomeController@index');
当然,如果你的控制器行为也接收其他的参数,你同样可以在action方法中传递第二个参数:
return redirect()->action('UserController@profile', ['id' => 1]);
重定向并闪存session
你可以通过RedirectResponse实例的链式调用来做到在生成重定向信息的同时闪存seession数据,这在执行行为之后存储消息状态的场景尤其有用:
Route::post('user/profile', function () { // Update the user's profile... return redirect('dashboard')->with('status', 'profile updated'); });
当然,在用户重定向到新页面时,你是可以访问到闪存的会话信息的,例如,在blade模板中,你可以这么使用:
@if (session('status')) <div class="alert alert-success"> {{ session('status')}} </div>@endif
响应宏
如果你想自定义某种可复用的响应,你可以使用Response facade的 macro方法或者提供Illuminate\Contracts\Routing\ResponseFactory的一个实现:
<?phpnamespace App\Providers;use Response;use Illuminate\Support\ServiceProvider;class ResponseMacroServiceProvider extends ServiceProvider { public function boot() { Response::macro('caps', function ($value) { return Response::make(strtoupper($value)); }); }}
macro方法接收一个别名作为第一个参数,接收一个闭包作为第二个参数。闭包会在访问ResponseFactory实现的实例的动态属性macro别名时执行,或者通过全局帮助方法response:
return response()->caps('foo');

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

Alipay PHP ...
