laravel - Laravel json 响应返回加密数据
问题描述
我正在使用 Encryptable 特征来加密 Room 模型的数据。
RoomController (/rooms)返回解密后的数据,但 ApiRoomController (/api/rooms)不返回。我怎样才能让它返回解密的数据?
可加密特征
trait Encryptable
{
public function getAttribute($key)
{
$value = parent::getAttribute($key);
if (in_array($key, $this->encryptable) && $value !== '' && $value !== null ) {
$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);
}
}
RoomController 索引函数
public function index()
{
$rooms = Room::select('id', 'name')->get()->sortBy('name')->values()->all();
return view('rooms.index')->withRooms($rooms);
}
ApiRoomController 索引函数
public function index()
{
$rooms = Room::select('id', 'name')->get()->sortBy('name')->values()->all();
return response()->json($rooms);
}
解决方案
我找到了一种使用API 资源的方法:
php artisan make:resource Rooms --collection
然后在你的app/Http/Resources/Rooms.php
文件中:
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
// more fields here
];
}
然后在你的ApiRoomController.php
文件中:
use App\Http\Resources\Rooms;
public function index()
{
$rooms = Room::select('id', 'name')->get()->sortBy('name')->values()->all();
return Rooms::collection($rooms);
}
推荐阅读
- django - 根据 django 中的开始日期和结束日期值创建月份
- powerbi - 浏览器中的 Power BI Mobile 布局或移动应用报告的 URL
- apache-beam - Apache Beam IO 没有返回 PCollection
- python - 从字符串中提取值 [Python]
- spring-boot - application.name_IS_UNDEFINED.log 来自哪里?
- aws-lambda - 如何使用spring调用在云中运行的函数
- android - Android:尝试获取密钥库文件的 sha-256 指纹时出错
- python - 如何从输出中删除“无”?
- laravel - Laravel Artisan db:seed 没有为指定数据库做种
- c - 如何在c中测试浮点值?