Создать DataSerializer
Класс:
namespace App\{Your Project Name}\Serializers;
use League\Fractal\Serializer\ArraySerializer;
class DataSerializer extends ArraySerializer
{
public function collection($resourceKey, array $data)
{
if ($resourceKey) {
return [$resourceKey => $data];
}
return $data;
}
public function item($resourceKey, array $data)
{
if ($resourceKey) {
return [$resourceKey => $data];
}
return $data;
}
}
Добавить setResponseData
функцию в базовом контроллере:
public function setResponseData($default=true, $data, $transformer, $includes = null){
if($default){
$resource = fractal($data, $transformer);
if($includes){
$resource->parseIncludes($includes);
}
return $resource;
}
$resource = null;
if($data instanceof LengthAwarePaginator){
$dataCollection = $data->getCollection();
$resource = new Collection($dataCollection, $transformer, 'data');
$resource->setPaginator(new IlluminatePaginatorAdapter($data));
} elseif($data instanceof \Illuminate\Database\Eloquent\Collection){
$resource = new Collection($data, $transformer, 'data');
} elseif($data instanceof Model){
$resource = new Item($data, $transformer, 'data');
} else{
return [];
}
$manager = new Manager();
$manager->setSerializer(new DataSerializer());
if($includes){
$manager->parseIncludes($includes);
}
$content = [];
if($resource){
$content = $manager->createData($resource)->toArray();
}
return $content;
}
Вызвать setResponseData
функцию из вашего производного контроллера:
$response = $this->setResponseData(false, $data, new YourTransformer(), ['include-1']);