2.0.14, как отключить встроенную теперь поддержку json-полей

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
DfK
Сообщения: 5
Зарегистрирован: 2018.02.19, 19:59

2.0.14, как отключить встроенную теперь поддержку json-полей

Сообщение DfK »

Всем привет.
Никто еще не задавался сабджем?

p.s. ну вот какой гений впихнул это в обновление, которое не ломает обратную совместимость?..
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: 2.0.14, как отключить встроенную теперь поддержку json-полей

Сообщение dmg »

DfK писал(а): 2018.02.19, 20:01 p.s. ну вот какой гений впихнул это в обновление, которое не ломает обратную совместимость?..
надо чтоб ломало ?
DfK
Сообщения: 5
Зарегистрирован: 2018.02.19, 19:59

Re: 2.0.14, как отключить встроенную теперь поддержку json-полей

Сообщение DfK »

chesar писал(а): 2018.02.19, 21:31 Что сломалось?
Поля использовались этого типа.
Упал геттер, так как в полях вместо json string - array, а Json::encode сильно расстраивается с array вместо json.
Но это малая печаль.
Упал еще и setter, так как теперь он ждет массив и расстраивается, получив строку. А там еще и логики навернуто.
Последний раз редактировалось DfK 2018.02.19, 23:32, всего редактировалось 1 раз.
DfK
Сообщения: 5
Зарегистрирован: 2018.02.19, 19:59

Re: 2.0.14, как отключить встроенную теперь поддержку json-полей

Сообщение DfK »

dmg писал(а): 2018.02.19, 21:34
DfK писал(а): 2018.02.19, 20:01 p.s. ну вот какой гений впихнул это в обновление, которое не ломает обратную совместимость?..
надо чтоб ломало ?
Когда меняется 2.0.*, предполагается, что код будет работать на любой из них, если не использовал баг какой.
А тут добавили улучшение, которое разрушило работающий код, да ещё и без явной возможности сходу это отключить.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: 2.0.14, как отключить встроенную теперь поддержку json-полей

Сообщение maleks »

DfK писал(а): 2018.02.19, 23:28 Упал геттер,
Упал еще и setter
json строка - это формат хранения. А вы логику на этом завязали и в вызывающем коде json строками модель настраиваете.
Такие вещи обычно делались - в событии after_find из json в массив преобразуется, в beforeSave() обратное. Сейчас они это автоматизировали по типу поля.
Yii2 universal module sceleton - for basic and advanced templates
DfK
Сообщения: 5
Зарегистрирован: 2018.02.19, 19:59

Re: 2.0.14, как отключить встроенную теперь поддержку json-полей

Сообщение DfK »

maleks писал(а): 2018.02.20, 09:56
DfK писал(а): 2018.02.19, 23:28 Упал геттер,
Упал еще и setter
json строка - это формат хранения. А вы логику на этом завязали и в вызывающем коде json строками модель настраиваете.
Такие вещи обычно делались - в событии after_find из json в массив преобразуется, в beforeSave() обратное. Сейчас они это автоматизировали по типу поля.
то есть если в коде в beforeSave было это привидение - то JsonExpression со строки типа не расстраивался? там падение идет в методе save(), так что я не вижу особой разницы между тем, в каком из мест кода идет приведение массива в json.
интересно, а такая (7.0):
php > var_dump(json_encode(''));
string(2) """"
ситуация как обрабатывается?


как раз с ActiveQuery::all() и ::one() особой проблемы нет, так как все ActiveQuery в приложении наследуют AbstractQuery, который и переопределяет эти методы.
Ответить