Как получить часть данных после сериализации формы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
EA-EKB
Сообщения: 12
Зарегистрирован: 2017.12.02, 13:46

Как получить часть данных после сериализации формы

Сообщение EA-EKB »

Доброго времени суток!

Есть форма заказа на сайте. После заполнения всех данных (доставка, оплата и т.д.) ajax'ом отправляем сериализованные эти данные на оформление заказа. В контроллере указываем формат ответа - Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; и добавляем заказ в базу. Но не могу понять как вытащить из этого набора данных один конкретный параметр, чтобы использовать его в условии? Пытался и так Yii::$app->request->post("OrderForm[payment_type]") и весь $_POST - Yii::$app->request->post() выводить... Подскажите плиз как можно из ответа выдернуть нужный параметр или как из JSON-формата вернуть данные обратно в вид массива?
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Как получить часть данных после сериализации формы

Сообщение carono »

В конфиг, в компонент request добавь парсер

Код: Выделить всё

        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser'
            ]
        ],
И сможешь получать данные через Yii::$app->request->post(), главлое чтобы в запросе был заголовок Content-Type: application/json
EA-EKB
Сообщения: 12
Зарегистрирован: 2017.12.02, 13:46

Re: Как получить часть данных после сериализации формы

Сообщение EA-EKB »

carono писал(а): 2018.11.06, 17:48 В конфиг, в компонент request добавь парсер

Код: Выделить всё

        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser'
            ]
        ],
И сможешь получать данные через Yii::$app->request->post(), главлое чтобы в запросе был заголовок Content-Type: application/json
Запрос отправляется в стандартном application/x-www-form-urlencoded. В контроллере используется $model->load(Yii::$app->request->post()). При смене contentType в ajax на application/json всё оформление заказа падает (в конфиг парсер добавил). Нашел функцию unserialize, но и она не спасает. При обычном unserialize(Yii::$app->request->post()) (выполняю после $model->load...) отдаёт 500 ошибку.

Вообще не понятно зачем в моём случае используется Yii::$app->response->format = \yii\web\Response::FORMAT_JSON. Только с толку сбило так как эта строка ни на что не влияет. В общем записал в файл сериализованный Yii::$app->request->post() и понял в чём ошибка. В массиве тип оплаты хранится в элементе массива, который лежит на втором уровне, а я пытаюсь его получить как элемент первого уровня.

В общем решил корявым способом, но какой уж сайт достался... закинул Yii::$app->request->post("OrderForm") в переменную $data и потом получил нужные данные через $data['payment_type'].

Спасибо за подсказку).
Ответить