laravel - 如何在从控制器返回之前将 Laravel 5.5 中的 API 资源类转换为数组?
问题描述
通常,在 Laravel 5.5 中,当使用 api 资源类时,您只需从控制器方法中返回资源类实例,如下所示:
public function show(Request $request, MyModel $model)
{
return new MyModelResource($model);
}
在对客户端的响应中,这会将模型转换为数组(并最终转换为 json)。
但是......我试图弄清楚如何在从控制器方法返回之前将所有内容转换为数组。我试过这个:
public function show(Request $request, MyModel $model)
{
$array = (new MyModelResource($model))->toArray($request);
// ...
}
这里的问题是资源上加载的任何关系都不会转换为数组。它们在内部显示$array
为资源类的实例。显然,toArray()
手动调用不会导致递归调用,并且诸如此类的方法->whenLoaded('relationship_name')
也没有得到真正的尊重。
那么如何让 Laravel 完成它所做的一切以递归方式将资源转换为数组,而不必从我的控制器方法中返回它呢?
解决方案
我相信您正在寻找的是resolve
资源类上的方法。见定义。
从它的外观来看,它也应该处理将关系转换为数组。只要确保您正确地设置了资源关系。
推荐阅读
- powershell - Powershell 使用另一个变量引用更新变量
- jquery - 如何从jQuery中的侦听器函数获取事件调用者
- python-3.x - 使用 Python 向子字符串添加值的建议
- javascript - svg 文件中的 JavaScript 上下文
- r - 用其他列的最后观察值填充 NA,通过添加一些常数进行修改
- php - 在 laravel 5.5 中加入子查询如何?
- bash - 尝试创建 .txt 文件的备份,该文件将重命名 txt 文件的后缀
- python - 从 API 获取标头
- php - 需要将静态文本添加到使用 foreach 的 PHP 电子邮件正文
- python - 尝试搜索 yahoo 时出错