我的用户模型中有以下代码,$ value在set上加密,但未保存到数据库(MariaDB 10.2 VARCHAR(255)utf8mb4_unicode_ci)。当我显示加密值并将其手动粘贴到数据库时,它会被正确解密。我错过了什么吗?
public function getMyKeyAttribute($value)
{
if ( $value )
{
return Crypt::decrypt($value);
}
else
{
return $value;
}
}
public function setMyKeyAttribute($value)
{
if ( $value )
{
return Crypt::encrypt($value);
}
else
{
return $value;
}
}
控制器:
public function update($id, UsersRequest $request)
{
$user = \Auth::user();
$user->update($request->all());
return redirect('users');
}
请求(与myKey无关):
class UsersRequest extends FormRequest
{
public function authorize() {
return true;
}
public function rules()
{
return [
'name' => 'required'
];
}
public function messages()
{
return [ ];
}
}
答案 0 :(得分:0)
设置属性需要您填写attributes
属性。该方法本身应返回void
。
public function setMyKeyAttribute($value)
{
if ($value)
$this->attributes['my_key'] = Crypt::encrypt($value);
}
有关详细信息,请参阅https://laravel.com/docs/5.5/eloquent-mutators#defining-a-mutator。
如果你使用的是PHP 7.1,你可以使用它(将加密空字符串,但你应该在设置属性之前检查它):
public function setMyKeyAttribute(string $value) : void
{
$this->attributes['my_key'] = Crypt::encrypt($value);
}