Полагаю, в вашей html-форме нет скрытого поля _csrf
, которое автоматически генерируется стандартными виджетами Yii2.
Таким образом, минимальный код вашей пользовательской формы может быть таким:
<form method="post">
<input type="hidden" name="<?= Yii::$app->request->csrfParam; ?>" value="<?= Yii::$app->request->csrfToken; ?>" />
<button type="submit"> Save </button>
</form>
Вы можете настроить пользовательскую сериализацию (см.
Как реализовать пользовательскую сериализацию JSON из веб-службы ASP.NET? )
Вы также можете создать свою собственную версию val который преобразует null в пустую строку. Однако я думаю, что метод, который вы в настоящее время используете, в любом случае, вероятно, лучше - общие методы могут добавить много сложности и, возможно, скрыть ошибки.
Я часто спрашиваю себя, в какой момент данные неверны? Неправильно ли говорить, что TypeId имеет значение null (неизвестно, не назначено), когда он должен быть специально назначен »(пустая строка)?
В этом случае я бы не догадался, что неверно, так это то, как в презентации отображается« null ", вам нужно просто пустое текстовое поле или что-то в этом роде. В этом случае его задача - преобразовать данные в приемлемое представление. Следовательно, ваше использование слова «слияние» кажется мне правильным.
Конечно, это, возможно, слишком строгая интерпретация и может быть не такой прагматичной, как вам хотелось бы. Однако в долгосрочной перспективе (я имею в виду на протяжении всего срока службы кода) обычно лучше всего поддерживать максимальную точность, насколько это возможно на практике.
Вы можете изменить jtemplate, чтобы он возвращал пустую строку вместо null, изменив следующую строку кода в jquery.jtemplate.js.
Сначала найдите эту функцию
TemplateUtils.cloneData = function(d, filter, f_escapeString) {
Следующим блоком кода является оператор if
if (d == null) {
return d;
}
Измените его на
if (d == null) {
return "";
}
И он должен сделать это