Laravel json响应返回加密数据
我正在使用可加密特性加密房间模型的数据 RoomController(/rooms)返回解密的数据,但ApiRoomController(/api/rooms)不返回。 我如何让它返回解密的数据 可加密特征Laravel json响应返回加密数据,laravel,laravel-encryption,Laravel,Laravel Encryption,我正在使用可加密特性加密房间模型的数据 RoomController(/rooms)返回解密的数据,但ApiRoomController(/api/rooms)不返回。 我如何让它返回解密的数据 可加密特征 trait可加密 { 公共函数getAttribute($key) { $value=parent::getAttribute($key); 如果(在数组($key,$this->encryptable)&&&$value!=''&&$value!==null){ $value=Crypt:
trait可加密
{
公共函数getAttribute($key)
{
$value=parent::getAttribute($key);
如果(在数组($key,$this->encryptable)&&&$value!=''&&$value!==null){
$value=Crypt::decrypt($value);
}
返回$value;
}
公共函数setAttribute($key,$value)
{
if(在数组中($key,$this->encryptable)){
$value=Crypt::encrypt($value);
}
返回父::setAttribute($key,$value);
}
}
房间控制器索引功能
公共功能索引()
{
$rooms=Room::select('id','name')->get()->sortBy('name')->values()->all();
返回视图('rooms.index')->带房间($rooms);
}
ApiRoomController索引功能
公共功能索引()
{
$rooms=Room::select('id','name')->get()->sortBy('name')->values()->all();
return response()->json($rooms);
}
我找到了一种方法:
然后在app/Http/Resources/Rooms.php
文件中:
公共功能待命($request)
{
返回[
'id'=>this->id,
“名称”=>$this->name,
//这里有更多的田地
];
}
然后在ApiRoomController.php
文件中:
使用App\Http\Resources\Rooms;
公共职能指数()
{
$rooms=Room::select('id','name')->get()->sortBy('name')->values()->all();
归还房间:收集(房间);
}
似乎@emotality已经想出了一个很好的解决方案
但是,这种方法不能按预期工作的原因是,底层模型的toArray()
/toJson()
方法没有调用trait中的getAttribute()
方法
这一点很重要,因为response()->json()
方法映射给定的集合,并在每个模型上调用toJson()
方法,以便为响应做好准备
因此,您也可以通过覆盖模型中的toArray
方法来解决此问题
class Room extends Model
{
use Encryptable;
public function toArray()
{
return [
'id' => $this->id,
'name' => $this->name,
// ...
];
}
}
主题外,但
$value!=''&&$值!==空值
可以替换为!空($value)
:)也使用这个特性,想知道答案+1.
class Room extends Model
{
use Encryptable;
public function toArray()
{
return [
'id' => $this->id,
'name' => $this->name,
// ...
];
}
}