Php Symfony 4-如何在控制器中使我的令牌有效?
在控制器的一个函数中,我初始化一个表单,并将参数传递给视图。然后表单必须重定向到控制器的另一个操作,如下所示: 控制器:索引() 我的表单操作将转到此函数:Php Symfony 4-如何在控制器中使我的令牌有效?,php,symfony,security,controller,token,Php,Symfony,Security,Controller,Token,在控制器的一个函数中,我初始化一个表单,并将参数传递给视图。然后表单必须重定向到控制器的另一个操作,如下所示: 控制器:索引() 我的表单操作将转到此函数: /** * Refuser une demande d'absence * * @Route("validation/absences/refuser/{id}", name="validation_refuser") * * @param Absence $absence *
/**
* Refuser une demande d'absence
*
* @Route("validation/absences/refuser/{id}", name="validation_refuser")
*
* @param Absence $absence
* @return void
*/
public function refuser(Request $request, Absence $absence)
{
$token = $request->get('refus_absence')['_token'];
if (!$this->isCsrfTokenValid('refus_absence__token', $token)) {
throw new \Symfony\Component\Security\Core\Exception\AccessDeniedException('Accès interdit');
}
$commentaire = $request->get('refus_absence')['commentaire'];
dd($commentaire);
}
我将令牌与请求一起取回,但无法对其进行验证。我仍然有这个错误
但在Symfony的文档中,他们说:
if ($this->isCsrfTokenValid('token_id', $submittedToken)) {
// ... do something, like deleting an object
}
在我的HTML中,我已经:
<input type="hidden" id="refus_absence__token" name="refus_absence[_token]" value="7bbockF5tz3r7Ne9f6dQB7Y5YMcwd1QRES4vHrhQEQE">
在接收函数中,只需重新创建表单:
$form = $this->createForm(RefusAbsenceType::class, new Absence());
$form->handleRequest($request);
// also checks csrf, it is enabled globally, otherwise, recreate parameters
// in the createForm call.
if($form->isSubmitted() && $form->isValid()) {
$absence = $form->getData();
// do whatever ... persist and stuff ...
}
您是否尝试过表单,因为您不必手动添加或检查这些内容,如果您正确地使用表单开始…我使用formBuilder创建了我的表单。他还生成了令牌。但如果我理解正确,我就不需要进行这种治疗了?知道在我的函数中,我不能使用if($form->isSubmitted()&&&$form->isValid())行,因为我没有访问变量$form的权限
$form = $this->createForm(RefusAbsenceType::class, new Absence());
$form->handleRequest($request);
// also checks csrf, it is enabled globally, otherwise, recreate parameters
// in the createForm call.
if($form->isSubmitted() && $form->isValid()) {
$absence = $form->getData();
// do whatever ... persist and stuff ...
}