symfony 3.4 将变量传递给树枝中的模态
symfony 3.4 pass variable to a modal in twig
我需要帮助来解决我的问题。我有一个包含 "equipos" 列表的页面。 table 中的每个 "equipo" 都有一个编辑按钮,页面显示另一个按钮来添加新的 "equipos"。
到目前为止,我设法使用 {{ render() }} 语法为 NEW 调用模态,equipoNewModal 工作正常,因为它是 Symfony 中的 "static" 路由(/equipo/new);但是 EDIT 不起作用,因为我无法将 "equipo" 变量传递给 equipoEditModal 并获取 id 以完成路线 (/equipo/{id}/edit
) 并调用控制器。
Symfony 无法呈现页面并且 return 错误:变量 "equipo" 不存在。
控制器不是问题,如果我在 list.html.twig 模板并跳过模态我可以编辑每个设备。要关闭控制器,如果我对行进行硬编码:
{{ form_start(equipoForm, {'action': path('edit_equipo', {'id': equipo.id})}) }}
在edit.html.twig到:
{{ form_start(equipoForm, {'action': path('edit_equipo', {'id': 1})}) }}
编辑操作有效,当然对于每个设备,编辑操作都会调用数据库中 id=1 的项目的版本,但它说控制器工作正常。
我遗漏了一些东西,希望社区找到解决方案...对不起我的英语。
==============
list.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>
===============
编辑控制器
/**
* @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(),
]);
}
编辑:
要解决问题,只需在 editAction 控制器中添加@Nobady 所说的行...
根据 list.html.twig 文件中的 equipo 更改数据目标调用每个模态:
<button type="button" class="btn btn-primary" href="" data-toggle="modal" data-target="#equipo{{ equipo.id }}">
当然还有 edit.html.twig 文件:
<div class="modal fade" id="equipo{{ equipo.id }}">
解决然后你必须传递 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
]);
}
我需要帮助来解决我的问题。我有一个包含 "equipos" 列表的页面。 table 中的每个 "equipo" 都有一个编辑按钮,页面显示另一个按钮来添加新的 "equipos"。
到目前为止,我设法使用 {{ render() }} 语法为 NEW 调用模态,equipoNewModal 工作正常,因为它是 Symfony 中的 "static" 路由(/equipo/new);但是 EDIT 不起作用,因为我无法将 "equipo" 变量传递给 equipoEditModal 并获取 id 以完成路线 (/equipo/{id}/edit
) 并调用控制器。
Symfony 无法呈现页面并且 return 错误:变量 "equipo" 不存在。
控制器不是问题,如果我在 list.html.twig 模板并跳过模态我可以编辑每个设备。要关闭控制器,如果我对行进行硬编码:
{{ form_start(equipoForm, {'action': path('edit_equipo', {'id': equipo.id})}) }}
在edit.html.twig到:
{{ form_start(equipoForm, {'action': path('edit_equipo', {'id': 1})}) }}
编辑操作有效,当然对于每个设备,编辑操作都会调用数据库中 id=1 的项目的版本,但它说控制器工作正常。
我遗漏了一些东西,希望社区找到解决方案...对不起我的英语。
==============
list.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>
===============
编辑控制器
/**
* @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(),
]);
}
编辑:
要解决问题,只需在 editAction 控制器中添加@Nobady 所说的行...
根据 list.html.twig 文件中的 equipo 更改数据目标调用每个模态:
<button type="button" class="btn btn-primary" href="" data-toggle="modal" data-target="#equipo{{ equipo.id }}">
当然还有 edit.html.twig 文件:
<div class="modal fade" id="equipo{{ equipo.id }}">
解决然后你必须传递 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
]);
}