我有一个来自数据库的条目列表。我希望在每一行的末尾都有一个“删除按钮”,这样用户就不必先转到编辑/显示页面来删除条目。
我尝试使用 csrf 令牌创建一个隐藏的输入字段,如下所示:
return $this->createFormBuilder()
->getForm()
;
这将输出:
<div id="form">
<input type="hidden" id="form__token" name="form[_token]" value="6c98ebfa9df07.....">
</div>
表单的其余部分我放在树枝模板中,以便每个表单根据条目的 id 都有自己的操作路径。
不幸的是,在树枝模板中只有第一个
{{ form_widget(delete_form) }}
将会被渲染。
我怎样才能更频繁地使用这个隐藏字段?
或者有什么方法可以以不同的方式做这件事吗?
谢谢你的帮助
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$deleteForm = $this->createDeleteForms();
$entities = $em->getRepository('IntranetServicesBundle:Laender')->findAll();
return $this->render('IntranetServicesBundle:Laender:index.html.twig', array(
'entities' => $entities,
'delete_form' => $deleteForm->createView(),
));
}
private function createDeleteForms()
{
return $this->createFormBuilder()
->add('id', 'hidden')
->getForm()
;
}
您可以使用以下方式呈现单个令牌:
{{ form_widget(form._token) }}
或专门针对您的情况:
{{ form_widget(delete_form._token) }}
但是,我认为您最好制作一系列表单并完全渲染每个表单:
在你的控制器中:
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$rep= $em->getRepository('IntranetServicesBundle:Laender')
->createQueryBuilder('l');
var_dump($rep->getQuery()->getDql());
$entities=$rep->getQuery()->getResult();
$delete_forms = array_map(
function($element){
return $this->createDeleteForm($element->getId());}
,$entities->toArray()
);
return $this->render('IntranetServicesBundle:Laender:index.html.twig'
, array(
'entities' => $entities,
'delete_forms' => $delete_forms
));
}
private function createDeleteForms($id)
{
return $this->createFormBuilder(array('id' => $id)))
->add('id', 'hidden')
->getForm()
;
}
public function deleteAction(Request $request, $id)
{
$form = $this->createDeleteForm($id);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('IntranetServicesBundle:Laender')
->find($id);
// this line might need to be changed to point to the proper repository
if (!$entity) {
throw $this->createNotFoundException('Unable to find Laender entity.');
}
$em->remove($entity);
$em->flush();
}
return $this->redirect($this->generateUrl('laender_index'));
// this line might need to be changed to point to the proper
// post-delete route
}
在你的树枝上做一些类似的事情:
{% for form in delete_forms %}{{form_widget(form)}}{% endfor %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)