API 리소스를 만들고 toArray()
메서드에서 쿼리 문자열을 통해 반환되는 특성을 필터링했습니다. 대부분의 API 리소스에서이 작업을 수행 할 수 있기를 원하며이를 재사용 가능한 방법으로 옮기는 것이 좋습니다. 이 일을하는 가장 좋은 방법은 무엇입니까?Laravel, Reusable API 리소스 방법
나는베이스를 연장하려고 생각하고 있었다. Resource
그러나 나는 그것을 어떻게 할 것인지 잘 모르겠다. 아니면 서비스 클래스 또는 저장소로 이동해야합니까?
내 방법은 다음과 같습니다. 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을
:
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?
}
전체 클래스 싶습니다
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'는 Resource 클래스를 반환하지만'parent :: filterFields()'또는'$ this-> filterFields()'를 호출하면'정의되지 않은 메소드 App \ Project :: filterFields()', 다른 클래스를 참조하는 것처럼 보입니까? – KeironLowe
전체 수업을 게시 할 수 있습니까? – Devon
완료했습니다. 질문을 업데이트했습니다. – KeironLowe