Laravel 5.5中为响应请求提供的可响应接口详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-21 21:20:10 浏览: 评论:0
这篇文章主要给大家介绍了关于Laravel 5.5中为响应请求提供的可响应接口的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
前言
Laravel 5.5 也将会是接下来的一个 LTS(长期支持)版本。 这就意味着它拥有两年修复以及三年的安全更新支持。Laravel 5.1 也是如此,不过它两年的错误修复支持将在今年结束。
Laravel 5.5 的路由中增加了一种新的返回类型:可相应接口( Responsable )。该接口允许对象在从控制器或者闭包路由中返回时自动被转化为标准的 HTTP 响应接口。任何实现 Responsable 接口的对象必须实现一个名为 toResponse() 的方法,该方法将对象转化为 HTTP 响应对象。
看示例:
- use Illuminate\Contracts\Support\Responsable;
- class ExampleObject implements Responsable
- {
- public function __construct($name = null)
- {
- $this->name = $name ?? 'Teapot';
- }
- public function status()
- {
- switch(strtolower($this->name)) {
- case 'teapot':
- return 418;
- default:
- return 200;
- }
- }
- public function toResponse()
- {
- return response(
- "Hello {$this->name}",
- $this->status(),
- ['X-Person' => $this->name]
- );
- }
- }
在路由中使用这个 ExampleObject 的时候,你可以这样做:
- Route::get('/hello', function() {
- return new ExampleObject(request('name'));
- });
在 Laravel 框架中, Route 类如今可以在准备响应内容时检查这种(实现了 Responsable 接口的)类型:
- if ($response instanceof Responsable) {
- $response = $response->toResponse();
- }
假如你在 App\Http\Responses 命名空间下用多个响应类型来组织你的响应内容,可以参考下面这个示例,该示例演示了如何支持 Posts (多个实例组成的 Collection):
- posts = $posts;
- }
- public function toResponse()
- {
- return response()->json($this->transformPosts());
- }
- protected function transformPosts()
- {
- return $this->posts->map(function ($post) {
- return [
- 'title' => $post->title,
- 'description' => $post->description,
- 'body' => $post->body,
- 'published_date' => $post->published_at->toIso8601String(),
- 'created' => $post->created_at->toIso8601String(),
- ];
- });
- }
- }
以上只是一个模拟简单应用场景的基础示例:返回一个 JSON 响应,但你希望响应层不是简单地用内置实现把对象 JSON 化,而是要做一些内容处理。以上示例同时假设 App\Http\Responses\Response 这个类能提供一些基础的功能。当然响应层也可以包含一些转换代码(类似 Fractal ),而不是直接在控制器里做这样的转换。
与上面示例中的 PostIndexResponse 类协作的控制器代码类似以下这样:
如果你想了解更多有关这个接口的细节,可以查看项目中 相关代码的 commit .
Tags: Laravel 5 5 响应请求
相关文章
- ·Laravel 5.6中的CURD操作(代码示例详解)(2020-01-15)
- ·如何在laravel 5中创建用于XSS防御的中间件? (2020-01-16)
- ·关于Laravel重定向的七种方法详解(2020-01-26)
- ·如何在laravel 5中使用DB事务?(2020-01-31)
- ·Laravel中如何给图片加水印?(2020-04-05)
- ·Laravel框架数据库CURD操作、连贯操作总结(2021-04-10)
- ·Laravel框架路由配置总结、设置技巧大全(2021-04-10)
- ·Laravel框架中扩展函数、扩展自定义类的方法(2021-04-10)
- ·跟我学Laravel之快速入门(2021-04-16)
- ·跟我学Laravel之安装Laravel(2021-04-16)
- ·跟我学Laravel之配置Laravel(2021-04-16)
- ·跟我学Laravel之请求(Request)的生命周期(2021-04-16)
- ·跟我学Laravel之路由(2021-04-16)
- ·跟我学Laravel之请求与输入(2021-04-17)
- ·跟我学Laravel之视图 & Response(2021-04-17)
- ·laravel安装和配置教程(2021-04-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)