Динамические модальные данные с Twig

Я отображаю список пользователей, использующих Twig:

{% for user in user.users %}
    <div class = "row user" data-id = "{{ user.id }}">
        <div class = "col">{{ user.firstname }} {{ user.lastname }}</div>
        <div class = "col">{{ user.email }}</div>
        <div class = "col">{{ user.lastLogin|date("F j, Y \\a\\t g:i a") }}</div>
    </div>
{% endfor %}

Когда пользователь нажимает на эту строку, я хотел бы, чтобы модальное диалоговое окно открывалось с дополнительными сведениями об этом конкретном пользователе.

Я подумал о том, чтобы просто включить модальное окно в цикл for. Однако, если список содержит несколько сотен пользователей, я не хочу отображать все эти дополнительные данные при каждой загрузке страницы.

Моя мысль состояла в том, чтобы сделать что-то вроде этого:

$('body').on('click', '.user', function() {
  $('#user').modal();
});

Но я не уверен, как динамически отображать только щелкнутые данные пользователя в модальном режиме через ветку:

<div class = "modal fade" id = "user" tabindex = "-1" role = "dialog">
    <div class = "modal-dialog">
        <div class = "modal-content">
            {{ user.firstname }} //additonal data for a given user
        </div>
    </div>
</div>
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 455
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

  1. Просто: вы можете установить данные в .row, такие как data-id (data-firstname, data-lastname и т. д.) И замените текст внутри всплывающего окна, например:
$('body').on('click', '.user', function() {
  $('#user .modal-content').html($(this).data('firstname'));
  $('#user').modal();
});
  1. Лучше: сделать ajax-запрос к серверу по идентификатору пользователя и показать ответ во всплывающем окне.

Спасибо - после рассмотрения вашего ответа я думаю, что запрос ajax - единственный жизнеспособный вариант, поскольку я хочу загрузить около 20 полей, которые не включены в исходный набор данных. Я попробую это сейчас!

user1392897 24.07.2019 18:14

Как сказал Макс, есть два способа добиться этого. Я бы предпочел первый подход, потому что вам не нужно добавлять все атрибуты данных, вы можете подключить шаблоны ветки к бэкэнд-функции, как указано здесь https://symfony.com/doc/current/frontend/encore/server-data.html =>

Ответ принят как подходящий

Следуя общим указаниям двух других авторов, я в конечном итоге разработал решение, используя запрос AJAX. Общий план ниже:

Контроллер:

if ($request->isXMLHttpRequest()) {

    $user = $this->entityManager->getRepository(User::class)->find($request->get('user_id'));

    return $this->render(
        'ui/user-details-modal.html.twig',
       ['user' => $user]
    );
}

Javascript:

$('body').on('click', '.user', function() {
    let id = $(this).data('id');
    return $.ajax({
        type: 'POST',
        url: url,
        data: {user_id: id},
        dataType: 'html',
        success: function(response) { 
            $('#user-details').html(response);
            $('#user').modal();     
        }
    });
});

Надеюсь, это будет полезно для тех, кто хочет сделать что-то подобное.

Другие вопросы по теме