为什么我的Laravel Resource资源类toArray方法未按预期触发?
问题原因
Laravel 的 JsonResource 仅在触发序列化逻辑时才会自动执行 toArray() 方法,你仅对资源类做了实例化操作,没有触发序列化流程,因此 toArray() 不会被调用。
实例化 JsonResource 的操作仅会把你传入的原始数据 $entry 挂载到资源实例的属性上,不会主动执行转化逻辑,只有以下场景才会触发 toArray() 执行:
- 将资源实例直接作为路由返回值,Laravel 响应处理底层会自动完成序列化
- 手动调用资源提供的序列化相关方法
解决方案
如果你需要在业务代码中即时拿到转化后的数组数据,可以选择以下任意一种方式触发 toArray() 执行:
- 调用
resolve()方法(自动传入当前请求实例,最常用)
$vendaVenderResource = (new Resources\Integration\PayGo\VendaVenderResource($entry))->resolve();
- 手动调用
toArray()并传入请求实例
use Illuminate\Http\Request; $vendaVenderResource = (new Resources\Integration\PayGo\VendaVenderResource($entry))->toArray(Request::instance());
- 调用
toJson()方法转JSON字符串,也会触发转化逻辑
$resourceJson = (new Resources\Integration\PayGo\VendaVenderResource($entry))->toJson();
内容的提问来源于stack exchange,提问作者wavrik
相关产品推荐
相关产品推荐

