所以我创建了一个API资源,并在toArray()
方法,我已经过滤哪些属性通过查询字符串返回得到。我希望能够为我的大部分API资源执行此操作,因此将其转化为可重用的方法是有意义的。这样做的最好方法是什么?Laravel,可重复使用的API资源的方法
我在想扩展基本Resource
,但我不知道我怎么会去这样做。还是应该将其移入服务类或存储库?
我的方法是下面;
public function toArray($request)
{
if($request->fields) {
$fields = [];
$selectedFields = explode(',', $request->fields);
foreach($selectedFields as $field) {
if(isset($this->{$field})) {
$fields[$field] = $this->{$field};
}
}
return $fields;
} else {
return parent::toArray($request);
}
}
理想情况下,我想这样做......
public function toArray($request)
{
if($request->fields) {
return parent::filterFields($request); // Not sure whether it should be parent::, $this or something else?
} else {
return parent::toArray($request); // Not sure whether it should be parent::, $this or something else?
}
// or event just
return parent::filterFields($request); // Not sure whether it should be parent::, $this or something else?
}
全类:
ProjectResource.php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
class ProjectResource extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
dd(parent::filterFields());
// or
dd($this->filterFields());
if($request->fields) {
$fields = [];
$selectedFields = explode(',', $request->fields);
foreach($selectedFields as $field) {
if(isset($this->{$field})) {
$fields[$field] = $this->{$field};
}
}
return $fields;
} else {
return parent::toArray($request);
}
}
}
test.php的
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
class Test extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function filterFields($request)
{
return 'test';
}
}
谢谢!
我都尝试,但既不工作,'get_parent_class'返回资源类,但是当我尝试'父:: filterFields()'或'$这个 - > filterFields()'我得到'调用未定义的方法应用程序\项目:: filterFields()',所以它看起来像指的是一个不同的类? – KeironLowe
你可以发布你的完整课程吗? – Devon
已完成,我已更新我的问题 – KeironLowe