Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel json响应返回加密数据_Laravel_Laravel Encryption - Fatal编程技术网

Laravel json响应返回加密数据

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:

我正在使用可加密特性加密房间模型的数据

RoomController(/rooms)返回解密的数据,但ApiRoomController(/api/rooms)不返回。 我如何让它返回解密的数据

可加密特征

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,
            // ...
        ];
    }
}