Как обрабатывать данные Vue / Axios Json, опубликованные на Yii2

Мне потребовалось время, чтобы понять это, поскольку это было немного очевидно. Я отвечу сам, чтобы другие могли извлечь пользу из ответа и, конечно же, посмотреть, есть ли лучший способ сделать это. Проблема была основана на Axios / Yii2, но я предполагаю, что это будет в равной степени применяться к другим интерфейсным библиотекам / фреймворкам, отправляющим данные в Yii2.

Мне нужно было отправить данные из небольшой формы, созданной на Vuejs, отправив запрос Axios в Action / Controller на Yii2, поэтому данные отправляются по простому запросу POST, и сообщение попадает на контроллер, но я не смог получить данные по акции, $ _POST | $ post прибывает пустым (проверено с помощью xdebug).

Насколько я помню, это было связано с безопасностью. Но я уже пытался отключить общедоступный $ enableCsrfValidation, так что проблема не в этом.

public $enableCsrfValidation = false;

Но несмотря ни на что, данные не добавлялись к данным запроса / публикации внутри Yii2.

Следующее изображение объясняет проблему, которую вы там найдете:

  1. Метод Axisos, отправляющий сообщение с тестовыми данными.
  2. Yii2 Action остановился на месте, я должен видеть данные.
  3. Сбор переменных xdebug и данных для запроса.
  4. Отправлен захват Chrome, в котором вы можете проверить полезную нагрузку.

Как обрабатывать данные Vue / Axios Json, опубликованные на Yii2

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
4
0
2 082
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ, как я сказал, «отчасти очевиден», но я не мог этого видеть, и я уверен, что некоторые другие разработчики, вероятно, упадут на это.

После сумасшедшего поиска и опроса всех, я попытался отправить запрос с помощью приложения Postman, да, это лучшее, что я знаю для тестирования API.

Не забудьте добавить файл cookie xdebug, чтобы иметь возможность отлаживать конечную точку PHP.

Там я нашел первую подсказку «очевидная часть», я не отправлял данные как данные формы, Axios и другие библиотеки, отправлял данные как необработанную (application / json) полезную нагрузку.

Это означает, что Yii2 не сможет найти данные внутри почтового запроса, да, это там, но магия Yii2 не будет работать, вы также не найдете эти данные внутри $ GLOBALS или в $ _POST.

Итак, читая документацию Yii2, я обнаружил, что внутри запроса я могу использовать функцию, которая поможет мне восстановить необработанные данные, поэтому для этого используйте следующую строку:

$raw_data = Yii::$app->request->getRawBody();

Теперь эти данные поступают к вам в виде простой необработанной строки json, поэтому используйте возможности PHP, чтобы преобразовать ее в объект.

$object= json_decode($raw_data );

И, наконец, используйте данные внутри, вызвав свойства, которые вы ищете, отправленные в полезной нагрузке:

Полезная нагрузка Json:

{
    "msg":"This is my payload",
    "id":"11"
}

Чтобы использовать это:

echo $object->{'msg'}; // prints: This is my payload

Так что это способ справиться с этим, теперь я хотел бы увидеть некоторые другие точки зрения, чтобы увидеть, есть ли способ лучше или более чистый способ сделать это. Надеюсь, поможет.

вы также можете использовать традиционный json_decode(file_get_contents('php://input'), true);

Muhammad Omer Aslam 21.06.2018 16:23

Другие вопросы по теме