В моем проекте Laravel (версия 6.6.2) у меня есть ситуация, в которой мне нужно передать объект (в частности, модель Eloquent) в представление, как JSON. Для этого я использовал следующий синтаксис:
{{ $model->toJson() }}
Проблема начинается с того, что мне нужны данные этой модели в переменной javascript, а использование JSON.parse
не всегда работает, потому что иногда моя модель будет иметь символы, которые Laravel убегают в HTML сущностей. Однако передача строки unescaped также нежелательна из-за риска XSS.
Для правильного удаления этих данных я использовал эту функцию (основываясь на другом ответе здесь в SO, который я не могу найти в данный момент, чтобы ссылка):
function parseHtmlJson(raw) {
var parser = new DOMParser();
var html = parser.parseFromString(raw, "text/html");
return JSON.parse(html.documentElement.textContent);
}
Однако эта функция также не идеальна, потому что, если любое из полей в моей модели имеет разрыв строки (или любой другой специальный символ, который Laravel не делает ' t escape) код взломает sh. Чтобы исправить , что я инкапсулировал свою модель с помощью addslashes
:
{{ addslashes($model->toJson()) }}
Итак, вопрос в том, что весь этот подход кажется слишком многословным (может быть, даже уродливым), есть ли что-нибудь лучше? способ передать JSON с сервера в мои представления и проанализировать его?
PS : я знаю, что выборка моей модели с помощью вызова ajax полностью избавит от этой проблемы и я, вероятно, приму это, но я хотел бы знать альтернативы.