Доброго времени суток!
Есть форма заказа на сайте. После заполнения всех данных (доставка, оплата и т.д.) ajax'ом отправляем сериализованные эти данные на оформление заказа. В контроллере указываем формат ответа - Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; и добавляем заказ в базу. Но не могу понять как вытащить из этого набора данных один конкретный параметр, чтобы использовать его в условии? Пытался и так Yii::$app->request->post("OrderForm[payment_type]") и весь $_POST - Yii::$app->request->post() выводить... Подскажите плиз как можно из ответа выдернуть нужный параметр или как из JSON-формата вернуть данные обратно в вид массива?
Как получить часть данных после сериализации формы
Re: Как получить часть данных после сериализации формы
В конфиг, в компонент request добавь парсер
И сможешь получать данные через Yii::$app->request->post(), главлое чтобы в запросе был заголовок Content-Type: application/json
Код: Выделить всё
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser'
]
],
Re: Как получить часть данных после сериализации формы
Запрос отправляется в стандартном application/x-www-form-urlencoded. В контроллере используется $model->load(Yii::$app->request->post()). При смене contentType в ajax на application/json всё оформление заказа падает (в конфиг парсер добавил). Нашел функцию unserialize, но и она не спасает. При обычном unserialize(Yii::$app->request->post()) (выполняю после $model->load...) отдаёт 500 ошибку.carono писал(а): ↑2018.11.06, 17:48 В конфиг, в компонент request добавь парсер
И сможешь получать данные через Yii::$app->request->post(), главлое чтобы в запросе был заголовок Content-Type: application/jsonКод: Выделить всё
'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser' ] ],
Вообще не понятно зачем в моём случае используется Yii::$app->response->format = \yii\web\Response::FORMAT_JSON. Только с толку сбило так как эта строка ни на что не влияет. В общем записал в файл сериализованный Yii::$app->request->post() и понял в чём ошибка. В массиве тип оплаты хранится в элементе массива, который лежит на втором уровне, а я пытаюсь его получить как элемент первого уровня.
В общем решил корявым способом, но какой уж сайт достался... закинул Yii::$app->request->post("OrderForm") в переменную $data и потом получил нужные данные через $data['payment_type'].
Спасибо за подсказку).