CakePHP:保存后更新会话变量
我有一个User
对象,它在成功验证后被塞入会话(无安全信息)以便于调用并确定我们是否拥有经过身份验证的用户或匿名会话。用户可以通过几种途径来改变他或她的部分或全部信息,并且希望保持该会话的价值。显而易见的答案是更新afterSave()
回调中的值,但这当然违反了MVC。CakePHP:保存后更新会话变量
是否有另一种方法捕获一个地方的每个变化,以便我不必在整个地方放弃会话写入?我想不出任何东西,也没有找到任何其他想法。我是唯一一个试图做这样的事情的人吗?
谢谢。坦白地说,我标记了neilcrookes的回答,因为似乎没有更好的方法。由于这种方式违反了我的强迫症感觉,但我采取了一种稍微不同的方式。我决定让我的User::authenticate()
方法将经过身份验证的用户对象返回给调用者,以便它可以随心所欲地执行任何操作。呼叫者“想要”做的一件事是在会话中放弃该值。这是冗余,但是非常非常有限。在我看来,这比从模型中访问会话要好得多(虽然如果你这样做肯定是该死的,如果你没有情况该死的)。
有些人可能会不同意,但我想在Model :: afterSave()中使用MVC,并在写入之前使用$ _SESSION - 测试会话,以防它未启动,例如您正在保存模型在一个shell或其他东西。 MVC是一种通用模式 - 一种指导方针,你可以用头来对付它,试图找出如何实现不太适合的东西,或者只是用另一种方式去做,并转向更重要的东西。
带上火焰。
同意。推崇纯粹主义者,万岁的实用主义者。 – inkedmn 2009-06-08 20:04:40
同意neilcrookes的回答 – 2009-06-08 20:09:24
//in users controller
if ($this->User->save()) {
$this->Auth->login($this->User->read());
$this->Session->setFlash[.. etc]
而对于记录,我不同意neilcrooks的答案,但我会避免喂养巨魔。
setFlash!=会话变量 – ByteNirvana 2009-06-09 23:17:41
您应该只需使用AppController
即可创建必要的回调,以保持会话数据处于最新状态。因此,例如,您可以让User
模型afterSave()
将名为changed
的属性设置为true。然后在您的AppController->afterFilter()
中检查该属性并根据需要更新会话数据。
或者,您可以编写一个组件,通过它来更新您的用户信息以及您的会话数据。然后,任何需要更改用户信息的控制器都需要包含该组件。
有没有必要编写冗余代码或打破MVC。
后保存
使用这样
$this->Session->write('Auth.User.mmid', $kinde['Kindle']['id']);
为什么使用会话数据模型volate MVC不?会话只是存储数据的另一种方式。实际上,理论上可以重新使用cakephp来访问会话中的数据,而不是来自MySQL ... – 2010-12-10 09:03:40