Передача информации из Twig в JavaScript
Дата обновления перевода 2025-02-21
Передача информации из Twig в JavaScript
В приложениях Symfony вам может потребоваться передать некоторые динамические данные
(например, пользовательскую информацию) из Twig в ваш код JavaScript. Одним из отличных
способов передачи динамической конфигурации является сохранение информации в атрибутах data-*
и считывание их позже в JavaScript. Например:
1 2 3 4 5 6
<div class="js-user-rating"
data-is-authenticated="{{ app.user ? 'true' : 'false' }}"
data-user="{{ app.user|serialize(format = 'json') }}"
>
<!-- ... -->
</div>
Получите это в JavaScript:
1 2 3 4 5
document.addEventListener('DOMContentLoaded', function() {
const userRating = document.querySelector('.js-user-rating');
const isAuthenticated = userRating.getAttribute('data-is-authenticated');
const user = JSON.parse(userRating.getAttribute('data-user'));
});
Note
Если вы предпочитаете доступ к атрибутам данных через свойство набора данных JavaScript,
имена атрибутов будут преобразованы из стиля тире в camelCase. Например,
data-number-of-reviews
станет dataset.numberOfReviews
:
1 2 3
// ...
const isAuthenticated = userRating.dataset.isAuthenticated;
const user = JSON.parse(userRating.dataset.user);
Значения атрибутов data-*
не имеют ограничений по размеру, поэтому вы можете
сохранять любое содержание. В Twig используйте стратегию экранирования html_attr
, чтобы
избежать путаницы с атрибутами HTML. Например, если ваш объект User
имеет метод
getProfileData()
, который возвращает массив, вы можете сделать следующее:
1 2 3
<div data-user-profile="{{ app.user ? app.user.profileData|json_encode|e('html_attr') }}">
<!-- ... -->
</div>