我的用户在Doctrine中设置了许多关系,但其中一个特别是导致我遇到很多问题,每个用户可以拥有多个成员资格,每个成员都有会员类型。
出于某种原因,但是当我加载这些会员资格时,我似乎正在查看我的会话,我登录并获得“我的帐户”页面,但是如果我刷新页面,我会被发送回登录屏幕。我的会话存储在数据库中,所以我一直在检查它们,看看会发生什么,这就是我所看到的:
我已经定义了自己的用户提供程序,我注意到如果我在refreshUser中将每个成员资格的成员资格类型设置为null,它就会开始工作,所以我猜测会话在这种关系上遇到了麻烦。
我真的很难找到解决方案,所以任何帮助都会非常感激。
编辑:正在做更多的实验,发现如果我切换到文件会话,一切都开始工作,所以它必须与在数据库中存储会话相关。我使用Symfony Cookbook中的指南进行了切换。这里参考我的config.yml中的相关位:framework:
session:
default_locale: %locale%
auto_start: true
storage_id: session.storage.pdo
parameters:
pdo.db_options:
db_table: session
db_id_col: session_id
db_data_col: session_value
db_time_col: session_time
session.storage.pdo:
class: Symfony\Component\HttpFoundation\SessionStorage\PdoSessionStorage
arguments: [@pdo, %session.storage.options%, %pdo.db_options%]
pdo:
class: PDO
arguments:
dsn: "mysql:dbname=%database_name%;host=%database_host%"
user: %database_user%
password: %database_password%
关于它们的其他所有内容似乎都很好,所以也许这是PdoSessionStorage中的一个错误
答案 0 :(得分:0)
它可能在你的等于方法太严格。如果你做$ user === $ otherUser;并且对象已经改变(关系不再是具有代理的集合),它将返回false。