我生成一个随机代码,然后将其保存在会话中。 用户具有输入和“验证”按钮。 目标是用户发送的值等于会话中生成的值
我将代码保存在会话中
//Get session
$session = $request->getSession();
//Set random code in session
$session->set("code", $code);
dump($session->get('code'));
我创建表单
$form = $this->createForm(ValidCodeType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form["code"]->getData() === $session->get('code')){
echo "OK";
}else {
echo "FAILED";
}
}
当我进入页面时,将生成一个代码(wnt)(并且当我重新加载页面时) “ null”对应于表单发送的值
dump($form["code"]->getData());
我提交表格。发送的值很好,但是已经生成了新代码
返回失败
我发送的代码正是生成的代码,应该向我返回“确定”。
有什么想法吗?谢谢
Symfony 4
答案 0 :(得分:3)
这是一种猜测,但我怀疑您是在处理表单之前在每个请求上生成代码并对其进行设置。因此,它在表单发布时发生变化。如果确实存在问题,则只需将代码移至$ form-> isValid块之外。
class MyController {
function myAction() {
$form = $this->createForm(ValidCodeType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form["code"]->getData() === $session->get('code')){
echo "OK";
}else {
echo "FAILED";
}
}
$code = some_random_code();
$request->getSession()->set("code", $code);
顺便说一句,您似乎在复制Symfony's csrf functionality。