2011-10-25 76 views
0

我需要密碼applyFilter()的幫助。當我創建新記錄(即保存)時,過濾器工作正常。使用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); 
}); 

感謝

回答

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); 
});