我在ZendFramework项目中使用Doctrine2而且我有一个不容易为我解决的问题......
因此,当用户成功登录页面时,我将他的对象放入会话中:
Zend_Auth::getInstance()->getStorage()->write($user);
一切正常,但当我刷新页面并从会话中加载用户时:
$user = Zend_Auth::getInstance()->getStorage()->read();
使用这个$ user我不能做任何Doctrine2操作: - /。我可以使用例如“getId()”方法,但是当我尝试例如在任何关系中使用$ user时:
$session = new App_Model_LogSessions();
$session->setUser($user);
...
我看到了Doctrine2异常:
不管理实体App_Model_Users。如果实体从数据库中获取或通过EntityManager#persist
注册为new,则对其进行管理
我该如何解决这个问题?有没有“重新加载”实体的方法?我需要使用会话,我不想在每个页面请求中从数据库加载用户。我想加载他一次并让他参加会议。
谢谢!
答案 0 :(得分:1)
在会话中保存Doctrine实体(基本上是您需要的)在这里得到解答:Doctrine 2: Can entities be saved into sessions?
取决于您将如何使用该实体,转换为数组可能会同时工作,同时非常简单。您将无法将其用作实体(持久等),但您将能够访问数据。
答案 1 :(得分:0)
我建议您只存储实际ID并使用缓存。但要解决您的问题,您可以随时重新附加实体。
这是你怎么做的(我不建议这样做但是无论如何:-P)
// Assume that $em is a instance of the EntityManager
$attachedObject = $em->merge($object);