我正在开发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
答案 0 :(得分:0)
您可以将实体表中的代码添加到自动哈希密码
protected function _setPassword($password)
{
return (new DefaultPasswordHasher)->hash($password);
}