Пароль нужно хешировать только при его изменении. В объекте сущности мы можем получить исходные данные для сущности и посмотреть, были ли они обновлены. Аналогично, мы не хотим хешировать пароль, если поле пароля пустое.
Предположим, вы делаете что-то вроде этого:
$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);
});