Преобразование красноречивой модели с использованием фрактала

Я пытаюсь использовать фрактальный конвертировать даты в мой красноречивый модель при отправке на веб-страницу через ajax. Однако я не получаю ожидаемый преобразованный объект данных. Вот мой код:

Трансформатор:

<?php

namespace App\Transformers\Models;

use App\Models\Student;
use League\Fractal;

class StudentTransformer extends Fractal\TransformerAbstract
{
public function transform(Student $student)
{
return [
'name'           => $student->name,
'birth_date'     => date('d-m-Y', strtotime($student->birth_date)),
'start_date'     => date('d-m-Y', strtotime($student->start_date)),
'is_active'      => $student->is_active ? 'Yes' : 'No',
'course_title'   => $student->course_title,
'university_id'  => $student->university_id,
'institution_id' => $student->institution_id,
'course_id'      => $student->course_id,
];
}
}

Файл маршрутов:

Route::get('/', function () {

$student = App\Models\Student::first();

$response = new League\Fractal\Resource\Item($student, new App\Transformers\Models\StudentTransformer);

return response()->json([$response]);

});

возвращает это:

[
{ }
]

Если я dd(), вот так:

Route::get('/', function () {

$student = App\Models\Student::first();

$response = new League\Fractal\Resource\Item($student, new App\Transformers\Models\StudentTransformer);

dd($response);

});

Я получаю следующее, без видимых преобразований

Item {#299 ▼
#data: Student {#305 ▼
#fillable: array:10 [▼
0 => "name"1 => "birth_date"2 => "start_date"3 => "is_active"4 => "course_title"5 => "university_id"6 => "institution_id"7 => "course_id"]
#connection: null
#table: null
#primaryKey: "id"#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:13 [▼
"id" => 1
"name" => "Michel Jast""birth_date" => "1979-12-22""start_date" => "2015-08-02""is_active" => 1
"course_title" => "quia""university_id" => "10954""institution_id" => 1044
"course_id" => 1
"created_at" => "2015-11-23 09:40:35""updated_at" => "2015-11-26 10:24:14"]
#original: array:13 [▼
"id" => 1
"name" => "Michel Jast""birth_date" => "1979-12-22""start_date" => "2015-08-02""is_active" => 1
"course_title" => "quia""university_id" => "10954""institution_id" => 1044
"course_id" => 1
"created_at" => "2015-11-23 09:40:35""updated_at" => "2015-11-26 10:24:14"]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}
#meta: []
#resourceKey: null
#transformer: StudentTransformer {#301 ▼
#availableIncludes: []
#defaultIncludes: []
#currentScope: null
}
}

Есть идеи, что мне здесь не хватает?

1

Решение

Моя реализация заключается в следующем:

Route::get('/', function () {

$student = App\Models\Student::first();

$response = new League\Fractal\Resource\Item($student, new App\Transformers\Models\StudentTransformer);

$manager = new \League\Fractal\Manager();
$manager->setSerializer(new \League\Fractal\Serializer\ArraySerializer());

return response()->json($manager->createData($response)->toArray());

});

Вы должны создать \League\Fractal\Manager экземпляр и назначить в него сериализатор. Менеджер вернет данные в массив или другие.

В фрактальная страница, есть больше деталей.

1

Другие решения

Я не использовал Factral в проекте, но я думаю, что вам нужно сделать что-то вроде.

Route::get('/', function () {

$student = App\Models\Student::first();

$response = new League\Fractal\Resource\Item($student, new App\Transformers\Models\StudentTransformer);

return response()->json($response->toArray());

});
0

По вопросам рекламы [email protected]