gpt4 book ai didi

ajax - Symfony 2 - 删除表单和 CSRF token

转载 作者:行者123 更新时间:2023-12-04 08:11:03 24 4
gpt4 key购买 nike

我有一个来自数据库的条目列表。我希望在每一行的末尾都有一个“删除按钮”,这样用户就不必先去编辑/显示页面删除条目。

我尝试使用 csrf token 创建一个隐藏的输入字段,如下所示:

return $this->createFormBuilder()
->getForm()
;

这将输出:
<div id="form">
<input type="hidden" id="form__token" name="form[_token]" value="6c98ebfa9df07.....">
</div>

我将表单的其余部分放在 Twig 模板中,以便每个表单根据条目的 id 都有自己的操作路径。

不幸的是,在 Twig 模板中只有第一个
{{ 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()
;
}

最佳答案

您可以使用以下方式呈现单个 token :

{{ form_widget(form._token) }}

或专门针对您的情况:
{{ form_widget(delete_form._token) }}

但是,我认为您最好制作一系列表单并完全渲染每个表单:

在您的 Controller 中:
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
}

在你的 Twig 上做一些事情:
{% for form in delete_forms %}{{form_widget(form)}}{% endfor %}

关于ajax - Symfony 2 - 删除表单和 CSRF token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com