前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Laravel 5.5 为响应请求提供的可响应接口

Laravel 5.5 为响应请求提供的可响应接口

作者头像
小李刀刀
发布于 2018-03-02 08:57:59
发布于 2018-03-02 08:57:59
1.5K00
代码可运行
举报
文章被收录于专栏:PHP 开发PHP 开发
运行总次数:0
代码可运行

Laravel 5.5路由中增加了一种新的返回类型:可相应接口(Responsable)。该接口允许对象在从控制器或者闭包路由中返回时自动被转化为标准的 HTTP 响应接口。任何实现 Responsable 接口的对象必须实现一个名为 toResponse() 的方法,该方法将对象转化为 HTTP 响应对象。看示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 的时候,你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::get('/hello', function() {
    return new ExampleObject(request('name'));
});

在 Laravel 框架中,Route 类如今可以在准备响应内容时检查这种(实现了 Responsable 接口的)类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ($response instanceof Responsable) {
    $response = $response->toResponse();
}

假如你在 App\Http\Responses 命名空间下用多个响应类型来组织你的响应内容,可以参考下面这个示例。该示例演示了如何支持 Posts (多个实例组成的 Collection):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 类协作的控制器代码类似以下这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--?php
 
namespace App\Http\Controllers;
 
use App\Http\Responses;
 
class PostsController extends Controller
{
    public function index()
    {
        $posts = \App\Post::all();
 
        return new Responses\PostIndexResponse($posts);
    }
}
</pre-->
<p>
  如果你想了解更多有关这个接口的细节,可以查看项目中<a href="https://github.com/laravel/framework/commit/c0c89fd73cebf9ed56e6c5e69ad35106df03d9db">相关代码的 commit</a>.</p>
        <div id="copyright">
            <img alt="" src="https://secure.gravatar.com/avatar/16a16bbe262d086712d25908c61a034b?s=55&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/16a16bbe262d086712d25908c61a034b?s=110&d=mm&r=g 2x" class="avatar avatar-55 photo" height="55" width="55">            <p>作者:<a itemprop="author" itemscope="" itemtype="http://schema.org/Person" href="https://ofcss.com" title="小李刀刀"><span itemprop="name">小李刀刀</span></a><br>
                原文链接:<a href="https://ofcss.com/2017/10/31/laravel-55-responsable-interface-for-responses.html" title="Laravel 5.5 为响应请求提供的可响应接口">Laravel 5.5 为响应请求提供的可响应接口</a><br>
                <a href="https://ofcss.com" title="裁纸刀下">裁纸刀下</a>版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。</p>
        </div>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Laravel 5.5 LTS 正式发布!
千呼万唤始出来~等了那么久的新一代 LTS!距离上一代 LTS (即 5.1)感觉已经好遥远了呢!新版的 LTS 同样会有为期两年的 Bug 修复和三年的安全更新!而其他对于一般的发行版则是提供六个月
overtrue
2018/07/05
2.6K0
具有嵌套关系的可重用API资源——Laravel5.5
本文内容主要围绕在 Laravel 5.5 中使用 API 开发的重要步骤,着重介绍如何利用 Laravel 的 API 资源(Resource)和控制器(Controller)进行多因素身份验证(MFA)。尤其强调了利用 Resource::collection 方法简化数据提供过程,以及对比 Fractal 和 Laravel 的资源处理方式。
幂简集成
2024/01/08
2070
具有嵌套关系的可重用API资源——Laravel5.5
Spiral 详细上手指南之请求和响应
在上一篇《Spiral 详细上手指南之路由规则》中,相信大家对于 Spiral 框架中的路由配置已经完全掌握了。不过在文章结束的时候,我们创建的控制器针对各种请求只是简单地响应一串文字证明路由生效了。这次我们就来实现其中的文章列表和文章详情。
小李刀刀
2020/03/07
1.4K0
Spiral 详细上手指南之请求和响应
基于 Redis 消息队列实现 Laravel 事件监听及底层源码探究
在 Laravel 中,除了使用 dispatch 辅助函数通过 Illuminate\Bus\Dispatcher 显式推送队列任务外,还可以通过事件监听的方式隐式进行队列任务推送,在这个场景下,事件监听器实际上扮演了「任务类」的角色。
学院君
2021/01/08
3.6K0
Laravel 用户授权 Gate和Policy
参考:https://d.laravel-china.org/docs/5.5/authorization
mafeifan
2018/09/10
1.3K0
Laravel 用户授权 Gate和Policy
Laravel 框架入门
Laravel 是目前最受欢迎的 PHP 框架之一,因其简洁、优雅的语法、强大的功能以及丰富的社区支持,受到了广大开发者的青睐。无论是初学者还是经验丰富的开发者,Laravel 都能帮助你更高效地开发现代化的 Web 应用。
繁依Fanyi
2025/02/02
1790
掌握 Laravel 的测试方法
不管你承认与否在研发一款产品时,软件测试对项目而言意义重大,然而是测试通常被我们视而不见。这篇文章我们主要研究 Laravel 框架的测试方法。
柳公子
2018/09/17
5.7K0
使用 Laravel 5.5+ 更好的来实现 404 响应
Laravel 5.5.10 封装了两个有用的路由器方法,可以帮助我们为用户提供更好的 404 页面。现在,当抛出 404 异常时,Laravel 会显示一个漂亮的 404.blade.php 视图文件,你可以自定义显示给用户 UI,但在该视图中,你无权访问 session,cookie,身份验证(auth)等...
柳公子
2018/09/17
2.3K0
【Laravel系列3.1】​一个请求的前世今生
在 Laravel 的世界中,请求和响应是非常重要的环节,虽说我们讲的是一个请求的前世今生,但这个请求最后的结果往往体现在一个响应中,所以我们就一起学习请求和响应这两方面的内容。
硬核项目经理
2023/03/03
7.5K0
【Laravel系列3.1】​一个请求的前世今生
基于 Pusher 驱动的 Laravel 事件广播(下)
如在上一篇中 Laravel Pusher Bridge 触发了事件后,传入了三个参数:
botkenni
2022/01/10
2.8K0
基于 Pusher 驱动的 Laravel 事件广播(下)
Spiral 官方超完整实战教程
我在写“Spiral 详细上手指南”的过程其实是一边做官方文档的翻译,一边验证英文版教程中内容的正确性,一边写的。而且涉及到每一个模块和组件,除了在演示项目中简单应用之外,一般还要顺便把该组件做比较全面详细地介绍。以致于进度就非常慢了。考虑到读者“快速上手”的需求,正好官方文档的“快速开始”文档也完成了,干脆我先把官方的快速开始文档(一个简单但完整的项目实战)翻译好发出来,以满足读者快速上手的需求。至于“Spiral 详细上手指南”,还会随着我的进度慢慢推进。
小李刀刀
2020/04/08
3K0
Spiral 官方超完整实战教程
Laravel 7发行说明
Laravel及官方发布的包皆遵循 语义版本化。主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次。次要版本和补丁 决不 包含非兼容性更改。
Lansonli
2021/10/09
9.1K0
Typecho通用评论组件包含Css样式
一直以来我都不太喜欢写Typecho评论列表样式,那时候多说还没有死,就想着有没有大佬直接写好一套Typecho评论列表简单样式,然后别人就可以改改css和html结构就能diy自己的样式,不用考虑php啥的,于是乎昨天简单弄了下。
泽泽社长
2023/10/01
4260
基于 Redis 消息队列实现文件上传的异步存储
本来准备给 Redis 实战入门篇做个收尾了,不过想起来 Laravel 进阶组件部分还剩下文件存储、邮件和通知这几个功能没有介绍,不如索性一并介绍下,因为它们并不是和 Redis 风马牛不相及,我们可以将这些耗时操作通过消息队列异步处理来提升页面响应速度,优化用户体验。
学院君
2021/01/22
3.6K0
基于 Redis + 资源库模式实现 Laravel 应用缓存功能
今天学院君来给大家演示如何在 Laravel 项目中基于 Redis 实现应用缓存功能,这想必也是很多人日常使用 Redis 最多的业务场景,这里的缓存指的是将数据库查询结果存储到 Redis,其目的是将数据加载从磁盘 IO 转化为直接从内存获取,从而提升应用性能。
学院君
2021/01/08
2.5K0
基于 Redis 有序集合实现热门浏览文章排行榜
创建 redis_demo 数据库,运行 php artisan migrate 在这个数据库中创建 posts 数据表。
学院君
2021/01/08
1.8K0
Laravel Eloquent 模型关联关系(下)
在前面两篇教程中,学院君陆续给大家介绍了 Eloquent 模型类支持的七种关联关系,通过底层提供的关联方法,我们可以快速实现模型间的关联,并且进行关联查询。今天我们将在定义好模型关联的基础上进行关联查询、插入和更新操作,看看如何借助模型关联提高代码的可读性并提高编码效率。
学院君
2023/03/03
19.7K0
Laravel Eloquent 模型关联关系(下)
Laravel5.2之Redis保存页面浏览量
说明:本文主要讲述使用Redis作为缓存加快页面访问速度。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。
botkenni
2022/01/10
8.8K0
Laravel5.2之Redis保存页面浏览量
laravel使用gravatar作为默认头像
文章作者ianzhi,原文地址:https://www.dnote.cn/users/ianzhi/posts/laravelshiyonggravatarzuoweimorentouxiang
ianzhi
2019/07/31
8440
Laravel源码解析之Response
之前两篇文章分别讲了Laravel的控制器和Request对象,在讲Request对象的那一节我们看了Request对象是如何被创建出来的以及它支持的方法都定义在哪里,讲控制器时我们详细地描述了如何找到Request对应的控制器方法然后执行处理程序的,本节我们就来说剩下的那一部分,控制器方法的执行结果是如何被转换成响应对象Response然后返回给客户端的。
KevinYan
2019/10/13
1.4K0
相关推荐
Laravel 5.5 LTS 正式发布!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文