Belajar Menggunakan Transformer Di Laravel
Laravel adalah salah satu framework PHP yang populer di luar sana. Laravel juga kebetulan menggunakan paradigma REST secara alami. Hari ini, saya akan menulis cerita tentang membuat trafo sederhana di Laravel. Cerita ini mengasumsikan Anda sudah mengetahui dasar-dasar Laravel.
Bagaimana Kami Biasanya Melakukannya
Biasanya, ketika kami membuat respons JSON di Laravel, kami akan menggunakan model kami.
class User
{
protected $fillable = [
'name', 'email', 'address', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
}
Katakanlah kita ingin mengambil First User
di JSON, maka kita mungkin akan menggunakan sesuatu seperti ini.
$user = User::find(1);
return $user;
Ledakan! Sekarang Anda mendapatkan respons JSON dari pengguna pertama yang terdaftar di aplikasi web Anda. Tapi, bagaimana jika berkembang lebih jauh dari perubahan model? Kemudian respon JSON juga berubah. Itu bagus di beberapa titik, tetapi bagaimana jika Anda masih harus mendukung aplikasi seluler atau klien aplikasi lain yang mengandalkan respons JSON lama dengan skema tertentu? Di situlah Transformers cocok.
Transformer
Pada dasarnya, transformer memberi Anda fleksibilitas untuk membuat format respons JSON yang Anda butuhkan. Dengan menggunakan transformer kita juga bisa melakukan type casting, hasil pagination, dan juga nest relationship.
Jika Anda menggunakan Dingo API maka modul Fractal Transformers sudah terpasang. Jika tidak, Anda dapat menginstalnya sendiri dengan menginstal Fractal.
Menulis trafo itu mudah, berikut adalah contoh trafo untuk model User
yang kita miliki sebelumnya.
class UserTransformer extends TransformerAbstract
{
public function transform(User $user)
{
return [
'id' => (int) $user->id,
'name' => (string) $user->name,
'email' => (string) $user->email,
'address' => (string) $user->address,
];
}
}
Kemudian, ketika kita hanya perlu memanggil trafo dengan sesuatu seperti cuplikan di bawah ini. Jika Anda menggunakan Dingo atau ingin menampilkan hasilnya di DataTable, Anda harus melakukannya dengan cara mereka, periksa dokumentasi mereka untuk instruksi lebih lanjut.
$user = User::find(1);
return (new UserTransformer)->transform($user);
Anda mungkin berpikir bahwa saat ini respons yang dikembalikan masih sama dibandingkan dengan yang dari metode biasa. Tapi, dalam jangka panjang, Anda akan berterima kasih kepada saya nanti. Kami akan terus membahas masalah ini di cerita masa depan.
Penyelesaian
Hari ini, kita telah berbicara tentang cara membuat respons JSON dari Transformer. Salah satu fleksibilitas penggunaan transformator adalah tidak langsung diturunkan dari kelas model. Dengan demikian, pembuatan versi API atau transformator untuk model yang sama dengan tujuan yang berbeda akan lebih mudah. Di cerita-cerita selanjutnya, kita akan membahas lebih lanjut tentang bagaimana memaksimalkan kemampuan transformer di Laravel. Terima kasih sudah membaca.