Slim Framework — & gt; Вывод XML с правильными заголовками

Написание API для обработки XML и JSON. Я хочу, чтобы ответ был в формате, который использует запрос.

Пример — заголовок запроса API имеет: Accept: application/xml

Проблема в том, что ответ всегда имеет Content-Type: application/json,

Я хочу это вернуть Content-Type: application/xml

Это код:

public function setHeaders() {
$headerType = $this->app->request->headers->get('Accept');
switch($headerType){
case "application/xml":
$this->app->response->headers->set("Content-Type",'application/xml');
default:
// default type is application/json
$this->app->response->headers->set("Content-Type",'application/json');
}
}

# 404 errors
$app->notFound(function () use ($app) {
$logMessage = sprintf("404 Not Found: URI: %s", $app->request->getPath());
$app->log->debug($logMessage);

$error = new \SMSTester\ErrorVO(2,"Request doesn\'t exist, check the manual.");
$app->parser->setHeaders();
$app->halt(404,$app->parser->outputParse($error));
});

outputParse возвращает следующую строку:

<xml>
<error>true</error>
<errorType>Request doesn\'t exist, check the manual.</errorType>
<errorMessage>2</errorMessage>
</xml>

1

Решение

Проблема в том, что вы не используете break выйти из вашего switch после срабатывания правильного случая (при условии, что $headerType на самом деле устанавливается на application/xml) Так что ваши default case также работает и отменяет любые изменения, сделанные в первом случае.

public function setHeaders() {
$headerType = $this->app->request->headers->get('Accept');
switch($headerType){
case "application/xml":
$this->app->response->headers->set("Content-Type",'application/xml');
break; //Break here prevents the next case from firing

default:
// default type is application/json
$this->app->response->headers->set("Content-Type",'application/json');
}
}
3

Другие решения

Или же

 $this->app->response->withHeader("Content-Type",'application/xml');

Настоящее время…

0

По вопросам рекламы [email protected]