我如何将 args 传递给 Laravel Eloquent API Resources 构造函数并将其获取到响应时返回的条件数据?
我尝试了什么:
Controller
$user = User::find(1);
return new UserResource($user, $shortData = true);
API 资源:
public function toArray($request, $shortData)
{
if($short) {
return $shortData;
} else {
return $fullData;
}
}
最佳答案
你必须做这样的事情:
- 在您的构造函数中添加条件数据(就像您所做的那样)。此条件数据可以为空:
$user = User::find(1);
return new UserResource($user, $conditionalData);
- 然后在您的 UserResource 中,将条件数据添加为私有(private)属性,并像这样将其添加到您的构造函数中(它也适用于 PHP 默认参数值...):
private $conditionalData;
public function __construct(User $resource, ?string $conditionalData)
{
parent::__construct($resource);
$this->conditionalData = $conditionalData;
}
- 您要做的最后一件事是使用 Laravel 条件属性系统 (https://laravel.com/docs/7.x/eloquent-resources#conditional-attributes)。 when 方法允许您在构建数组时明确定义您的资源,而无需求助于条件语句。
public function toArray($request)
{
return [
'data_1' => $this->data1,
'data_2' => $this->data2,
'conditional_data' => $this->when(!is_null($this->conditionalData), $this->$conditionalData)
];
}
仅当属性不为空时,您的条件数据才会出现在您的响应中。
关于laravel - 将参数传递给 laravel Eloquent api 资源构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60408176/