Laravel 响应:自定义响应类型
问题
在 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);