我尝试创建自定义特征来自动加密模型的列'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'];
关于这个的任何想法?
答案 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是一个很好的特质包。
您正在寻找的是CryptingModelTrait
。我不能比文档说的更好地描述它。来自文档的简短说明:
此软件包包括EncryptingModelTrait,它在使用它的任何Eloquent模型上实现EncryptingModelInterface。 EncryptingModelTrait为Eloquent模型添加方法,用于在模型设置时自动加密模型上的属性,并在模型获得时自动解密模型上的属性。该特质包括:
的能力在设置$encryptable
属性时自动加密属性
获取它们时,会自动解密$encryptable
属性中的属性
使用encrypt/decrypt
方法手动encrypt() and decrypt()
一个值
检查是否使用isEncrypted()
方法加密了值
换出使用setEncrypter()
方法使用的加密器类
与所有特性一样,它是独立的,可以单独使用。但请注意,使用此特征会使模型的神奇__get()
和__set()
方法过载(有关如何处理重载冲突,请参阅Esensi \ Model \ Model源代码)。