CakePHP3刷新会话数据
我有一个页面,我可以修改用户详细信息(用户名,名字,头像…)。 我的导航栏中有一个元素,其中包含有关当前登录用户的信息。问题是我不知道如何在修改数据后立即刷新会话 在用户控制器中:CakePHP3刷新会话数据,php,session,cakephp,cakephp-3.0,Php,Session,Cakephp,Cakephp 3.0,我有一个页面,我可以修改用户详细信息(用户名,名字,头像…)。 我的导航栏中有一个元素,其中包含有关当前登录用户的信息。问题是我不知道如何在修改数据后立即刷新会话 在用户控制器中: public function edit($id = null) { if (!$id) { throw new NotFoundException(__('Invalid user')); } $user = $this->Users->get($id);
public function edit($id = null)
{
if (!$id) {
throw new NotFoundException(__('Invalid user'));
}
$user = $this->Users->get($id);
if ($this->request->is(['post', 'put'])) {
$this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
//REFRESH SESSION ????\\
$this->request->session()->write('Auth.User', $user);
//\\
$this->Flash->success(__('User has been updated.'));
return $this->redirect(['action' => 'edit/' . $id]);
}
$this->Flash->error(__('Unable to update User details.'));
}
$this->set(compact('user'));
}
只需按照登录时的设置方式进行更新,即使用
AuthComponent::setUser()
此外,您可能希望仅在已编辑的用户实际上是当前登录的用户的情况下执行此操作。您希望将数据设置为与Auth组件相同的格式,即(目前)作为数组,并且出于安全目的,不使用密码
一个简单的示例,假设一个名为id
的单列主键和一个名为password
if ($this->Auth->user('id') === $user->id) {
$data = $user->toArray();
unset($data['password']);
$this->Auth->setUser($data);
}
另见
AuthComponent::setUser()
此外,您可能希望仅在已编辑的用户实际上是当前登录的用户的情况下执行此操作。您希望将数据设置为与Auth组件相同的格式,即(目前)作为数组,并且出于安全目的,不使用密码
一个简单的示例,假设一个名为id
的单列主键和一个名为password
if ($this->Auth->user('id') === $user->id) {
$data = $user->toArray();
unset($data['password']);
$this->Auth->setUser($data);
}
另见
unset($data['password'])
不应该是必需的,因为它应该位于实体中的隐藏属性中。@StefanD。然而,在理想的情况下,烘焙功能直到一个月前才被打破(bake 1.1.4),人们甚至可能不使用烘焙,和/或使用除token
、password
和passwd
以外的列(这是bake检测到的),所以我想说,仍然值得一提的是,人们应该注意这一点。unset($data['password')
不应该是必需的,因为它应该位于实体中的隐藏属性中。@StefanD。然而,在理想的情况下,烘焙功能直到一个月前才被打破(bake 1.1.4),人们甚至可能不使用烘焙,和/或使用除token
、password
和passwd
以外的列(这是bake检测到的),所以我想说,值得一提的是,人们应该注意这一点。