简体   繁体   English

Symfony 2 CSRF验证令牌

[英]Symfony 2 csrf validation token

i want to delete an advert without going to /delete/{id} path and just deleting with a modal pop-in. 我想删除广告而不转到/ delete / {id}路径,而只是使用模式弹出窗口删除。 In the dev environment, no problem , my form validation works great like that : 在开发环境中,没问题,我的表单验证可以像这样很好地工作:

form.html.twig : form.html.twig:

<div class="well">
{# form_start(form, {'attr': {'class': ''}}) #}
<form name="monext_perfclientbundle_advert" method="post" action="" class="" enctype="multipart/form-data">

{# Les erreurs générales du formulaire. #}
{{ form_errors(form) }}

<div class="form-group">
    {# Génération du label. #}
    {{ form_label(form.title, "Titre de l'annonce", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}

    {# Affichage des erreurs pour ce champ précis. #}
    {{ form_errors(form.title) }}

    <div class="col-sm-4">
        {# Génération de l'input. #}
        {{ form_widget(form.title, {'attr': {'class': 'form-control'}}) }}
    </div>
</div>

<div class="form-group">
    {{ form_label(form.content, "Contenu de l'annonce", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
    {{ form_errors(form.content) }}
    <div class="col-sm-4">
        {{ form_widget(form.content, {'attr': {'class': 'ckeditor'}}) }}
    </div>
</div>

{{ form_row(form.category) }}

    <button id="addFile">Ajouter un fichier</button>
    <div id="uploads"></div><br>

{{ form_widget(form.save, {'attr': {'class': 'btn btn-primary'}}) }}

{{ form_rest(form) }}

{{ form_end(form) }}

</form>

info.html.twig: info.html.twig:

 <div class="modal-footer parente">
    <div><a href="#" class="btn" data-dismiss="modal">Annuler</a></div>
  <div>
  <form class="nomargin" action="{{ path('info_delete', {'id': advert.id}) }}" method="post">
    <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
   <input type="submit" value="Supprimer" class="btn btn-danger"/>{{ form_rest(form) }}                                                                           
 </form>
  </div>
</div>

deleteAction() : deleteAction():

            $form = $this->createFormBuilder()->getForm();
        if ($form->handleRequest($request)->isValid()) {
            $em->remove($advert);
            $em->flush();

            $request->getSession()->getFlashBag()->add('info', "L'annonce a bien été supprimée.");
            return $this->redirect($this->generateUrl('info'));
        }

        return $this->render('MonextPerfclientBundle:Default:delete.html.twig', array(
            'advert' => $advert,
            'form'   => $form->createView()
        ));

It doesnt work in production environment i dont know why.. my dump : The CSRF token is invalid. 它在生产环境中不起作用,我不知道为什么..我的转储: CSRF令牌无效。 Please try to resubmit the form 请尝试重新提交表格

i got it thanks to Luax my friend ! 我要感谢我的朋友Luax!

  {{ form_start(form, {'action': path('info_delete', {'id': advert.id})}) }}
     <input type="hidden" name="form[_token]" value="{{ csrf_token('form') }}">
     <input type="submit" value="Supprimer" class="btn btn-danger"/>{{ form_rest(form) }}
   {{ form_end(form) }}

Issue resolved :) 问题解决了 :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM