我需要applyFilter()
的密码帮助。当我创建一个新记录(即保存)时,过滤器工作正常。
但是当我更新密码时,如何修改过滤器以加密密码。
这是我的保存过滤器。
Users::applyFilter('save', function($self, $params, $chain) {
if ($params['data']) {
$params['entity']->set($params['data']);
$params['data'] = array();
}
if (!$params['entity']->exists()) {
$params['entity']->password = Password::hash($params['entity']->password);
}
return $chain->next($self, $params, $chain);
});
由于
答案 0 :(得分:1)
只有在密码更改时才需要对密码进行哈希处理。在实体对象中,我们可以获取实体的原始数据并查看它是否已更新。同样,如果密码字段为空,我们不想散列密码。
假设你正在做这样的事情:
$user = Users::first($id);
if (!empty($this->request->data) && !empty($user)) {
if ($user->save($this->request->data)) {
// woohoo
} else {
// bummer
}
}
然后以下代码应该可以工作。
Users::applyFilter('save', function($self, $params, $chain) {
if ($params['data']) {
$params['entity']->set($params['data']);
$params['data'] = array();
}
$entity = $params['entity'];
if ($entity->password) {
$export = $entity->export();
if (empty($export['data']['password']) || $export['data']['password'] != $entity->password) {
$entity->password = Password::hash($entity->password);
}
}
return $chain->next($self, $params, $chain);
});