renzhengchi 2018-08-07 12:56:20 307次浏览 3条回复 0 0 0

RT 现在需要在查询、存储记录时,对某字段进行加解密

加密好说,直接重写save方法就可以了。 例如:

$user = new dao\User();
$user->name = 'test';
$user->save();

public function save()
{
    $this->__set('name', Encrypt::encryptData($this->__get('name')))
    parent::save();
}

而解密现在不知道如何去做。在yii1中,我可以直接重写afterFind方法,改写User类的成员变量name值,例如

echo $user->name; //我希望此处直接是解密好的,yii1可以重写下面的方法做到
public function afterFind()
{
    $this->__set('name', Encrypt::decryptData($this->__get('name')));
}

请教大家,到了yii2,如何做才能实现上述功能?

  • 回复于 2018-08-10 14:26

    我只知道插入的话可以在模型中写
    public function behaviors(){

        return [
            [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => 'name',
                ],
                'value' => function ($event) {
                    return md5($this->name);
                },
            ],
        ];
    }
    
    2 条回复
    回复于 2018-08-10 14:32

    ActiveRecord::EVENT_AFTER_FIND

    回复于 2018-08-12 12:59

    behaviors确实没研究过 我研究下,有结论或问题再回复你^ ^

  • 回复于 2018-08-14 16:15

    Yii2也是有 afterFind 这个事件的

  • 回复于 2018-08-21 17:53

    新增、修改的时候beforeSave事件了解一下;查询的时候模型内的fields方法了解一下。

您需要登录后才可以回复。登录 | 立即注册