我的项目在我的本地计算机上运行良好。但是一旦我将它上传到OVH服务器上,当我提交任何表格(例如注册FOSUserBundle
以及我自己的表格)时,我遇到了一些问题。
问题是当我提交表单时,我有一个无效的CSRF令牌。
我尝试了很多解决方案:
我将{{ form_rest(form) }}
添加到我的twig文件中。
我在csrf_protection
中将false
更改为app/config/config.yml
,然后提交请求时没有表单中的任何字段。
注意:我尝试使用symfony 2.4和2.3,但问题仍然存在。
我的树枝:
<form id="modifier_form" name="modifier_form" method="post" {{ form_enctype(form) }}>
<div id="form_prenom">{{ form_row(form.prenom) }}</div>
<div id="form_nom">{{ form_row(form.nom) }}</div>
<div id="form_situation_pro">
<label>Situation professionnelle</label>
<select name="optone"
id="pays_select"
onchange="setOptions(document.modifier_form.optone.options[document.modifier_form.optone.selectedIndex].value);">
<option value=" " selected="selected"> </option>
{% for a in pays %}
<option value="{{ a.getId }}">{{ a.getName }}</option>
{% endfor %}
</select>
</div>
<div id="form_situation_pro_sous">
<label></label>
<select name="opttwo" id="region_select">
<option value=" " selected="selected"></option>
</select>
</div>
{{ form_widget(form) }}
{{ form_restt(form) }}
<input type="submit" value="Enregistrer" />
我的控制器
public function modifierAction(){
$connecteduser =$this->getUser();
$fich=$connecteduser->getFichsig();
//si l'utulisateur a deja une fiche sinon il faut le remplire
if(!$fich){
$fich = new Fichsig;
$connecteduser->setFichsig($fich);
}
$myuser=$this->getDoctrine()
->getManager()
->getRepository('TS\InscriptionBundle\Entity\User')->findByEmail($connecteduser->getEmail());
$form = $this->createForm(new UserType($this->getDoctrine()->getManager()), $connecteduser);
$request = $this->getRequest();
if ($request->isMethod('POST')) {
$form->bindRequest($request);
if ($form->isValid()) {
//get parametres
////
$connecteduser->setFichsig($fich);
$em = $this->getDoctrine()->getManager();
$em->merge($connecteduser);
$em->flush();
return $this->redirect($this->generateUrl('ts_inscription_profil'));
}
}
// On passe la méthode createView() du formulaire à la vue afin qu'elle puisse afficher le formulaire toute seule
return $this->render('TSInscriptionBundle:Logged:modifier_logged_layout.html.twig', array(
'form' => $form->createView(),
'pays'=>$this->pays(),
'region'=>$this->region(),
));
}
我的config.yml
framework:
#esi: ~
translator: { fallback: "%locale%" }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
fragments: ~
http_method_override: true
答案 0 :(得分:1)
你写了
{{form_restt(form)}}
应该是这样的:
{{form_rest(form)}}
并删除{{ form_widget(form) }}
。它用于渲染表单的一部分。由于您已经提交了字段 form.prenom
。 form_rest将呈现其余字段。
快乐编码......
答案 1 :(得分:0)
一旦开始使用小部件,行和标签,您可以使用{{form(form)}}让枝条为您呈现它,然后您必须使用 {{form_start(form)} ,在提交按钮之后和 {{form_end(form)}} 之前,您应该添加 {{ form_rest(form)}}
我认为你错过了form_end并更正了form_rest,因为它有拼写错误
答案 2 :(得分:-1)
如果您使用symfony 2.3
,请设置表单结尾{{ form_end(form, {'render_rest': false}) }}