Недавно узнал, что в Yii2 есть поддержка Json полей, поэтому решил переписать старый код, но столкнулся с трудностями.
При получении информации никаких проблем нет, не нужно самому декодировать поле, значение приходит уже в виде массива. Но при попытке изменения значений возникает проблема.
Значение некорректно отображается в форме. Отображается "Array"
<?= $form->field($model, 'meta')->textInput(['maxlength' => true]) ?>
Ну тут вроде всё ясно. Просто перед отправкой модели в форму нужно сделать json_encode и передать строку:
$model->meta = json_encode($model->meta);
Но как теперь сохранить значение при отправке формы?Открываю форму, редактирую значение Json поля, которое записано в виде строки и сохраняю. В посте приходит модель с измененной Json строкой, все ок.
Вот, что приходит в посте
Array
(
[_csrf] => VmUwDTNtfnkj2HqHmZJyxfaKMTC_IFElEnXlXuJloTcOKmVXUQQxNk2HLb7TxCChhflVZdUUBVJjRI4auDPqDg==
[Sale] => Array
(
...
[meta] => {<b>"sub_CHANGED":3</b>,"icon":"fal fa-gift","text":"-70%","price":1650,"oldPrice":5500}
...
)
)
Но при загрузке модели
$model->load(Yii::$app->request->post()
нет никаких изменений в данных.
Загруженная модель
app\models\Sale Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
...
[meta] => {<b>"sub":3</b>,"icon":"fal fa-gift","text":"-70%","price":1650,"oldPrice":5500}
...
)
Есть подозрение, что здесь что то не так с валидацией, но не знаю что. В чем может быть проблема?