Как обработать данные Vue / Axios Json, опубликованные на Yii2 - PullRequest
0 голосов
/ 13 июня 2018

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

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

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

public $enableCsrfValidation = false;

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

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

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

enter image description here

1 Ответ

0 голосов
/ 13 июня 2018

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

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

enter image description here

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

enter image description here

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

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

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

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

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

$object= json_decode($raw_data );

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

Json Payload:

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

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

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

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

...