Я пытаюсь использовать фрактальный конвертировать даты в мой красноречивый модель при отправке на веб-страницу через 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
}
}
Есть идеи, что мне здесь не хватает?
Моя реализация заключается в следующем:
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
экземпляр и назначить в него сериализатор. Менеджер вернет данные в массив или другие.
В фрактальная страница, есть больше деталей.
Я не использовал 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());
});