Codeigniter4 - возвращает данные массива как JSON, а не как XML по умолчанию - PullRequest
1 голос
/ 22 апреля 2020

Я просто пытаюсь поиграть с новой платформой Codeiginiter4. Я создал один маршрут и прикрепил его к одному простому методу todos, который должен возвращать список задач (задача) как JSON, когда я пытаюсь нажать на URL, но он возвращает его в формате XML. Код прост:

class Home extends BaseController
{
    use ResponseTrait;

    public function index()
    {
        return view('welcome_message');
    }

    public function todos()
    {   
        return $this->respondCreated(['todos' => ['task' => 'Check out new CI4']]);
    }

    //--------------------------------------------------------------------
}

// Результат

<response>
<todos>
<task>Check out new CI4</task>
</todos>
</response>

Позже я обнаружил, что если я явно кодирую массив как JSON (используя json_encode), он возвращает результат как JSON в браузере. Например,

public function todos()
{   
    return $this->respondCreated(json_encode(['todos' => ['task' => 'Check out new CI4']]));
}

Так что мой вопрос, есть ли способ по умолчанию вернуть массив в формате JSON в браузере в CI4?

CI Version I использую: v4.0.2

1 Ответ

1 голос
/ 22 апреля 2020

Вы запрашиваете ответ xml, поэтому CI4 дает вам то, что вы просили. Вы должны определить свой заголовок http, чтобы запрашивать json, прежде чем возвращать свой ответ.

public function todos()
    {   
       $this->request->setHeader('Accept', 'application/json');
        return $this->respondCreated(['todos' => ['task' => 'Check out new CI4']]);
    }

Примечание: если вы всегда хотите получить ответ json, вы можете go до app/Config/Format.php и закомментировать один из них. поэтому ваша $supportedResponseFormats переменная выглядит следующим образом:

    public $supportedResponseFormats = [
        'application/json',
//      'application/xml', // machine-readable XML
        'text/xml', // human-readable XML
    ];

Проблема в том, что вы удаляете CI4, способную обработать xml ответ таким образом.

Проверьте отличную документацию CI4 для более подробная информация: https://codeigniter.com/user_guide/outgoing/api_responses.html#handling - типы ответов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...