目录
HTTP 响应
基础响应
响应对象
附加响应头
添加cookie到响应
其它响应类型
视图响应
JSON响应
文件下载
文件响应
重定向
重定向至命名路由
重定向至控制器行为
重定向并闪存session
响应宏
首页 后端开发 php教程 laravel基础教程 -- 响应

laravel基础教程 -- 响应

Jun 23, 2016 pm 01:07 PM

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');
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP记录:PHP日志分析的最佳实践 PHP记录:PHP日志分析的最佳实践 Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

自定义/扩展框架:如何添加自定义功能。 自定义/扩展框架:如何添加自定义功能。 Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

See all articles