gpt4 book ai didi

php - Symfony 4 注册表第二次提交 "There is already an active transaction"

转载 作者:可可西里 更新时间:2023-11-01 13:34:42 28 4
gpt4 key购买 nike

我已经按照文档中的说明创建了一个用户注册表。稍后我想添加 CSRF。从那以后它就不能正常工作了。我安装并删除了软件包。 https://symfony.com/doc/current/doctrine/registration_form.html

composer require security-csrf
composer remove security-csrf
rm -rf vendor
rm -rf var/cache/*

那没有帮助。

当我填写表格并提交时。如果用户被保存。第二次,我收到以下错误消息。

只有当我在浏览器中删除cookie“PHPSESSID”时,我才能再次发送表单。之后又是同样的问题。

PDOException:
There is already an active transaction

at vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:1249
at PDO->beginTransaction()
(vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:1249)
at Doctrine\DBAL\Connection->beginTransaction()
(vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:376)
at Doctrine\ORM\UnitOfWork->commit(null)
(vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:358)
at Doctrine\ORM\EntityManager->flush()
(src/Controller/RegistrationController.php:40)
at App\Controller\RegistrationController->registerAction(object(Request), object(UserPasswordEncoder))
(vendor/symfony/http-kernel/HttpKernel.php:149)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
(vendor/symfony/http-kernel/HttpKernel.php:66)
at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
(vendor/symfony/http-kernel/Kernel.php:190)
at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
(public/index.php:37)

我试着调试它。交易在某处被激活,然后又没有。我找不到问题所在。有人能帮帮我吗?

symfony/config/services.yaml

services:
Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler:
arguments:
- !service { class: PDO, factory: 'database_connection:getWrappedConnection' }
- { db_table: session, db_username: username, db_password: password }

最佳答案

我最近遇到了同样的问题,对我来说,这归结为使用 PDOSessionHandler 以及与 getWrappedConnection 共享 Doctrine 连接。

在您的 services.yaml 中更改您的 PdoSessionHandler 服务定义

Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler:
arguments:
- !service { class: PDO, factory: 'database_connection:getWrappedConnection' }
- { lock_mode: 1 }`

即只需另外添加 lock_mode 参数。这为我“修复”了它,尽管我正在更深入地研究为什么使用 LOCK_TRANSACTIONAL 而不是 LOCK_ADVISORY 会更好。

关于php - Symfony 4 注册表第二次提交 "There is already an active transaction",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48452223/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com