Передача інформації з Twig у JavaScript
Дата оновлення перекладу 2022-12-14
Передача інформації з 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 6 7 8
document.addEventListener('DOMContentLoaded', function() {
var userRating = document.querySelector('.js-user-rating');
var isAuthenticated = userRating.dataset.isAuthenticated;
var user = JSON.parse(userRating.dataset.user);
// або з jQuery
//var isAuthenticated = $('.js-user-rating').data('isAuthenticated');
});
Note
При отримані доступу до атрибутів даних з JavaScript, імена атрибутів
перетворюються зі стилю з дефісами на camelCase. Наприклад, data-is-authenticated
стає isAuthenticated
, а data-number-of-reviews
- numberOfReviews
.
Обмеження розміру для значення атрибутів 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>