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 ...
}