yii2覆盖模型方法

问题描述:

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

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

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

+0

检查如何在[高级项目模板](https://github.com/yiisoft/yii2-app-advanced/blob/master/common/models/User.php)中完成此操作。 – Bizley

+0

我想了解它是如何工作的,我不需要它,只是理解 – vitasya

您可以执行beforeSave方法see here并加密密码。

或者,您可以在调用$model->save()之前,在控制器的actionCreate方法中执行此操作。基于该Advanced Project Template

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