基于标题的路由与Slim 3

时间:2017-04-12 17:26:59

标签: php rest http routing slim

我有一条Slim 3路线:$app->get('/calendar/{date}', 'CalendarCtrl:getSchedule');
此路由可以通过简单的HTML列表,json或xml格式返回相同的计划 现在我正在寻找一个基于Accept(或更多标头)HTTP标头的简单REST解决方案。

例如:
要求:

GET /calendar/2017-01-01  
Accept: application/json

响应:

Content-Type: application/json
Body: {json schedule}

所以路线应该是这样的:$app->get('/calendar/{date}', {Accept: application/json}, 'CalendarCtrl:getScheduleJson');

我知道我可以在路由处理程序中检查该标头。但我正在寻找一个简单的声明性解决方案。

1 个答案:

答案 0 :(得分:1)

在从API发送响应之前添加中间件以检查该标头

$app->add(function ($req, $res, $next) {
//Checking for $req content-type here then send the response with the same one 
//example 
$headerValue= $req->getHeader('Accept');
if($headerValue=='application/json')
{
  $response = $next($req, $res);
    return $response
            ->withHeader('Content-type', 'application/json');
 }
else{

//check for other header here  
}      
});