symfony 3,4 передать переменную модал в веточку - PullRequest
2 голосов
/ 23 января 2020

Мне нужна помощь, чтобы решить мою проблему. У меня есть страница с моим списком "equipos". Каждое «equipo» в таблице имеет кнопку «Edit», а на странице отображается еще одна кнопка для добавления нового «equipos».

Пока мне удается вызывать модальный для NEW с помощью {{render ()}} Синтаксис equipoNewModal работает нормально, потому что это маршрут "stati c" (/ equipo / new) в Symfony; но EDIT не работает, потому что я не могу передать переменную "equipo" в equipoEditModal и получить идентификатор для завершения маршрута (/equipo/{id}/edit) и вызвать контроллер.

Symfony can ' t отобразить страницу и вернуть ошибку: переменная "equipo" не существует.

С контроллером проблем нет, если я создаю тег с href = {{path ('edit_equipo', {'id ': equipo.id})}} в списке. html .twig шаблон и пропустите модал, который я могу редактировать на каждом оборудовании. Чтобы отклонить контроллер, если я жестко закодировал строку:

{{ form_start(equipoForm, {'action': path('edit_equipo', {'id': equipo.id})}) }}

в редактировании. html .twig to:

 {{ form_start(equipoForm, {'action': path('edit_equipo', {'id': 1})}) }}

действие редактирования работает, конечно, для каждого оборудования действие edit вызывает издание элемента с id = 1 в базе данных, но говорит, что контроллер работает нормально.

Я что-то упустил и надеюсь, что сообщество найдет решение ... извините, мой engli sh.

==============

список. html .twig

<table id="datatable-buttoms" class="table table-striped table-bordered">
    <thead>
        <tr>
            <th>ID</th>
            <th>EQUIPOS</th>
        </tr>
    </thead>
    <tbody>
            {% for equipo in equipos %}
                <tr>
                    <td>{{ equipo.id }}</td>
                    <td>{{ equipo.equipo }}</td>
                    <td>{{ equipo.nomenclador }}</td>
                    <td>{{ equipo.nomenclador.especialidad }}</td>
                    <td>
                    <button type="button" class="btn btn-primary" href="" data-toggle="modal" data-target="#equipoEditModal">
                        Editar
                    </button>
                    <button type="button" class="btn btn-danger" href="" data-toggle="modal" data-target="#equipoDeleteModal">
                        Eliminar
                    </button>
                </td>
            </tr>
           {{ render(controller('AppBundle:Equipo:edit', {'id': equipo.id})) }}
        {% endfor %}
    </tbody>
</table>

<button type="button" class="btn btn-primary" href="" data-toggle="modal" data-target="#equipoNewModal">
    Agregar
</button>
{{ render(controller('AppBundle:Equipo:new')) }}

==== =========

new. html .twig

<div class="modal fade" id="equipoNewModal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">NUEVO</h4>
            </div>
            <div class="modal-body">
                {{ form_start(equipoForm, {'action': path('new_equipo')}) }}
                {{ form_widget(equipoForm) }}
                <button type="submit" class="btn btn-primary">Guardar</button>
                {{ form_end(equipoForm) }}
            </div>
        </div>
    </div>
</div>

==============

edit. html .twig

<div class="modal fade" id="equipoEditModal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">EDITAR</h4>
            </div>
                <div class="modal-body">
                    {{ form_start(equipoForm, {'action': path('edit_equipo', {'id': equipo.id})}) }}
                        {{ form_widget(equipoForm) }}
                        <button type="submit" class="btn btn-primary">Guardar</button>
                    {{ form_end(equipoForm) }}
                </div>
        </div>
    </div>
</div>

===============

Edit Controller

    /**
     * @Route("/equipo/{id}/edit", name="edit_equipo")
     */
    public function editAction(Request $request, Equipo $equipo)
    {
        $form = $this->createForm(EquipoFormType::class, $equipo);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $equipo = $form->getData();

            $em = $this->getDoctrine()->getManager();
            $em->persist($equipo);
            $em->flush();

            return $this->redirectToRoute('list_equipos');
        }

        return $this->render('sysreport/equipos/edit.html.twig', [
            'equipoForm' => $form->createView(),
        ]);
    }

EDIT :

Чтобы решить эту проблему, добавьте только строку, которую @Nobady говорит в контроллере editAction ...

Чтобы вызвать каждый модал в зависимости от цели изменения данных оборудования в списке. html .twig файл:

<button type="button" class="btn btn-primary" href="" data-toggle="modal" data-target="#equipo{{ equipo.id }}">

и, конечно, в редактировании. html .twig файл тоже:

<div class="modal fade" id="equipo{{ equipo.id }}">

1 Ответ

1 голос
/ 23 января 2020

, чтобы решить, тогда вы должны передать equipo в качестве параметра, например, в Edit Controller:

/**
 * @Route("/equipo/{id}/edit", name="edit_equipo")
 */
public function editAction(Request $request, Equipo $equipo)
{
    $form = $this->createForm(EquipoFormType::class, $equipo);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $equipo = $form->getData();

        $em = $this->getDoctrine()->getManager();
        $em->persist($equipo);
        $em->flush();

        return $this->redirectToRoute('list_equipos');
    }

    return $this->render('sysreport/equipos/edit.html.twig', [
        'equipoForm' => $form->createView(),
        'equipo' => $equipo
    ]);
}
...