Недавнее обновление версии Silverstripe до 4.3.1, похоже, нарушило некоторые функциональные возможности, когда объект данных загружается как текстовое поле в формате JSON.
Объект выглядит следующим образом:
class Foo extends DataObject
private static $db = [
'Name' => 'Varchar',
'Description' => 'Text',
'Models' => 'Text',
];
Затем есть функция для загрузки объекта с помощью JSON, сгенерированного из запроса формы:
$data = json_decode($request->getBody(), true);
$foo = new Foo();
$foo->update($data);
Вот пример JSON $data
:
"Name":"Test",
"Description":"Wangle fangle blurble wurgle.",
"Models":{
"fish":{"trout":10,"salmon":15,"sturgeon":20},
"vegetable":{"carrot":1,"cabbage":2,"leek":3},
"sauce":{"chipotle":6,"tomato":4,"soy":2}
}
До недавнего времени «Модели»структура будет сохранена в поле «Модели» в виде текста:
"fish":{"trout":10,"salmon":15,"sturgeon":20},
"vegetable":{"carrot":1,"cabbage":2,"leek":3},
"sauce":{"chipotle":6,"tomato":4,"soy":2}
Но теперь мы получаем следующую ошибку:
DataObject::setField: Models only accepts scalars at /var/www/example/vendor/silverstripe/framework/src/ORM/DataObject.php:2648
Строка 2640 в DataObject.php говорит:
If this is a proper database field, we shouldn't be getting non-DBField objects
Было ли последнее исправление безопасности, блокирующее попытку загрузки объекта JSON в поле?
Может кто-нибудь помочь с сохранением JSON моделей втекстовое поле?