0

我需要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);
});

谢谢

4

1 回答 1

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);
});
于 2011-10-30T04:15:40.637 回答