CakePHP 3如何检测实体字段是否已更改

时间:2015-06-24 22:08:51

标签: cakephp entity

我正在开发CakePHP 3应用程序。

现在,我需要在保存实体之前使用SHA1加密一些数据。

我在Table Object中尝试过beforeSave()回调,就像在CakePHP 2.x中一样,但它不起作用。

因此,我发现当前版本中的更改类型(在beforeSave / beforeUpdate上更新数据)需要适应访问者和变异者,就像文档所说的那样(http://book.cakephp.org/3.0/en/orm/entities.html#accessors-mutators)。

文档甚至有关于检查实体字段是否被修改(http://book.cakephp.org/3.0/en/orm/entities.html#checking-if-an-entity-has-been-modified)的注释,但我不明白如何使用它。

我需要一些简单的逻辑,就像身份验证系统一样。

在保存之前,在用户模型中,如果填写了字段responsible_card_password,则必须使用SHA1对字段进行哈希处理。如果没有填充,则该字段保持不变。

目前,使用acessors和mutators方法,如果我将表单上的字段设置为空白,则实体将此字段保存为空白。

我怎么能解决这个问题?非常感谢CakePHP开发者的世界! :-D

1 个答案:

答案 0 :(得分:0)

您可以将实体表中的代码添加到自动哈希密码

protected function _setPassword($password)
{
    return (new DefaultPasswordHasher)->hash($password);
}