Laravel 4.2自定义特征来加密数据

时间:2015-11-30 14:26:12

标签: php laravel encryption laravel-4 traits

我尝试创建自定义特征来自动加密模型的列'email':

<?php
trait EncryptData
{

public function getAttribute($key)
{
    $value = parent::getAttribute($key);

    if (in_array($key, $this->encryptable)) {
        $value = Crypt::decrypt($value);
    }
    return $value;
}

public function setAttribute($key, $value)
{
    if (in_array($key, $this->encryptable)) {
        $value = Crypt::encrypt($value);
    }

    return parent::setAttribute($key, $value);
    }
}
?>

我这样启动我的控制器,导致异常未定义属性:MyModel :: $ encryptable

class MyModel extends BaseController{

Use EncryptData;
protected $encryptable = ['email'];

关于这个的任何想法?

2 个答案:

答案 0 :(得分:1)

据我所知,这个特性用于加密模型字段?

在这种情况下,我应该做的是创建一个Model类,其中每个模型都扩展并在此类中添加函数。

<?php

class Model {
    protected $encryptable;

    public function getAttribute($key)
    {
        $value = parent::getAttribute($key);

        if (in_array($key, $this->encryptable)) {
            $value = Crypt::decrypt($value);
        }
        return $value;
    }
}

-

<?php

class User extends Model {
    function __construct(){
        $this->$encryptable = ['email'];
    }

}

答案 1 :(得分:-3)

here是一个很好的特质包。

  • 验证模型特征
  • 清除模型特征
  • Hashing Model Trait
  • 加密模型特征
  • Juggling Model Trait
  • 软删除模型特征
  • 关联模型特征
  • Sluggable Model Trait

您正在寻找的是CryptingModelTrait。我不能比文档说的更好地描述它。来自文档的简短说明:

此软件包包括EncryptingModelTrait,它在使用它的任何Eloquent模型上实现EncryptingModelInterface。 EncryptingModelTrait为Eloquent模型添加方法,用于在模型设置时自动加密模型上的属性,并在模型获得时自动解密模型上的属性。该特质包括:

的能力

在设置$encryptable属性时自动加密属性 获取它们时,会自动解密$encryptable属性中的属性 使用encrypt/decrypt方法手动encrypt() and decrypt()一个值 检查是否使用isEncrypted()方法加密了值 换出使用setEncrypter()方法使用的加密器类 与所有特性一样,它是独立的,可以单独使用。但请注意,使用此特征会使模型的神奇__get()__set()方法过载(有关如何处理重载冲突,请参阅Esensi \ Model \ Model源代码)。