Laravel 响应:自定义响应类型 2 个改进

问题

在 Laravel 中,我可以自定义响应类型么,比如我想返回 XML 内容类型的响应,该怎么做?

回答

如果你想要自定义一个可以在多个路由和控制器中复用的响应,可以使用 Response 门面的 macro 方法创建一个响应宏方法。

下面,我们就开始创建一个 xml 响应宏方法,在 routes\web.php 中添加以下代码:

<?php

Response::macro('xml', function($content) {
    return Response::make($content, 200, [
        'Content-Type' => 'text/xml'
    ]);
});

Route::get('/xml', function () {
    $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><websites></websites>');

    $website = $xml->addChild('website');
    $website->addChild('url', 'https://learnku.com');
    $website->addChild('desc', 'LearnKu 是终身学习者的编程知识社区');
    $content = $xml->asXML();

    return Response::xml($content);
});

在上面的代码中, 我们通过macro 方法定义了一个名为 xml 的响应宏方法,macro 方法接受宏方法名作为第一个参数,闭包函数作为的第二个参数。我们的 xml 宏方法功能很简单,就是返回一个 Content-Type 标头为 text/xml 的响应。

响应宏方法定义好后,在控制器或路由中可以这样调用:

return Response::xml($content);

也可以这样调用:

return response()->xml($content);

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!