Rob*_*son 4 cakephp session-variables reset
我有一个User
对象,一旦成功进行身份验证,就会隐藏在会话中(没有安全信息)以便于调用,并确定我们是否有经过身份验证的用户或匿名会话.用户可以通过多种途径更改其部分或全部信息,我希望将该会话值保持最新.显而易见的答案是更新afterSave()
回调中的值,但这当然违反了MVC.
是否有另一种方法可以捕获一个地方的每个变化,这样我就不必在整个地方放弃会话写入?我想不出任何事情,也没有找到任何其他想法.我是唯一一个尝试这样做的人吗?
谢谢.
最终解决方案:坦率地说,我将neilcrookes的回答标记为答案,因为似乎没有更好的方法.但是,由于这种方式违反了我的OCD意识,我采取了一条略有不同的道路.我决定让我的User::authenticate()
方法将经过身份验证的用户对象返回给调用者,以便它可以随心所欲地执行任何操作.呼叫者"想要"做的事情之一就是在会话中删除该值.这是冗余,但它非常非常有限.在我看来,这比从模型中访问会话感觉更好(尽管如果你这样做肯定是该死的,如果你不这样做则该死).
//in users controller
if ($this->User->save()) {
$this->Auth->login($this->User->read());
$this->Session->setFlash[.. etc]
Run Code Online (Sandbox Code Playgroud)
而且为了记录,我不同意neilcrooks的答案,但我会避免喂养巨魔.
有些人可能不同意,但我会搞砸 MVC,在 Model::afterSave() 中执行它并使用 $_SESSION - 在写入会话之前测试会话,以防它没有启动,例如您正在 shell 中保存模型或某物。
MVC 是一种通用模式 - 一种指导方针,您可以用头来反对它,试图弄清楚如何实现不太适合的东西,或者只是用另一种方式去做,然后转向更重要的事情。
点燃火焰。
归档时间: |
|
查看次数: |
4580 次 |
最近记录: |