발표자 (like this one)가 decorator pattern을 구현했으며 기존 Laravel 모델에 필드와 로직을 추가하는 좋은 방법임을 최근에 발견했습니다. 오히려 JSON 응답을 반환하는 API의 장식 패턴을 구현하는 것이 어떻게JSON 응답을위한 Laravel 발표자
{{ $object->timeago }}
{{ $object->created_at }}
:
// Tack on a new readable timestamp field.
public function timeago()
{
return $this->object->created_at->whenForHumans();
}
// Wrap an existing field with some formatting logic
public function created_at()
{
return $this->object->created_at->format('Y-m-d');
}
그때 내보기에 이러한 발표자 필드를 사용할 수 있습니다 : 아래 내 질문에 대한 다음의 예를 가지고 블레이드보기보다? 내가 읽은 모든 Laravel/JSON 기사에서 객체는 변형/발표자 논리를 거치지 않고 즉시 반환됩니다. 예 :
// converting a model to JSON
return User::find($id)->toJson();
// returning a model directly will be converted to JSON
return User::all();
// return associated models
return User::find($id)->load('comments')->get();
내 JSON 응답에 발표자 필드를 구현하려면 어떻게해야하나요? 데이터를 얻을 장식 된 응답을 반환하는
일부 기능 :
이public function index()
{
$news = News::all();
return $this->respond([
'data' => $this->newsTransformer->transformCollection($news->toArray())
]
);
}
위의 함수를 호출 할 것이다 당신이 언급 한 바와 같이
$object->timeago
$object->created_at
:
명확성을 위해은 첫 번째 코드에 응답 기능은 상태 코드와 데이터, 및 헤더, 같은 랩 응답. 훨씬 더 깨끗합니다. –
@SergiuParaschiv, [toArray' 함수]를 재정의해야한다는 것을 알았습니다 (https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php#L2359). 왜냐하면 Laravel은 컬렉션을 반환 할 때 toJson 메서드를 호출하지 않기 때문입니다. 그러나 두 메서드 (Model :: toJson 및 Collection :: toJson)는 각 모델에 대해 toArray를 호출합니다. – rvignacio