yii2覆盖模型方法

时间:2017-04-13 08:15:15

标签: php yii2

我试图在Yii2上创建简单的项目。现在我正在创建用户功能。我已经用Gii创建了用户模型和CRUD。当我创建新用户或编辑时,模型以纯文本格式保存密码。我想覆盖此功能,以便能够以md5格式保存密码。

在Zend Framework中有类似的能力。 我有密码字段,当我想更改默认设置密码行为时,我刚刚在模型中创建了setPassword方法。 哪种方式对Yii2来说是正确的?

在我的User.php模型类中,我创建了setPassword($ password)方法,但它没有被执行(我检查它将var_dump放在里面)。

2 个答案:

答案 0 :(得分:1)

基于Advanced Project Template

  1. 模型SignupForm可用于创建新的用户模型。
  2. 运行此过程的控制器是带有操作Signup的SiteController - 当SignupForm正确load()时,将调用来自SignupForm的ed方法signup()
  3. 当数据为properly validated时,初始化新用户类实例。
  4. 通过调用$user->setPassword($this->password);设置新密码 - $this->password是用户选择的原始纯文本密码。
  5. 方法setPassword()设置基于明文密码生成(散列和盐渍)的password_hash属性 - 此散列密码存储在数据库中。
  6. 您可以通过修改setPassword()来更改密码的哈希方式(但不建议这样做)。

答案 1 :(得分:0)

您可以实施beforeSave方法see here,并加密密码。

或者,您可以在调用actionCreate之前使用$model->save()方法在控制器中执行此操作。