#Route Model Binding
Saat menyuntikkan ID model ke tindakan route atau pengontrol, Anda akan sering meminta untuk mengambil model yang sesuai dengan ID itu. Penjilidan model route Laravel menyediakan cara mudah untuk secara otomatis menyuntikkan instance model secara langsung ke route Anda. Misalnya, alih-alih menyuntikkan ID pengguna, Anda dapat menyuntikkan seluruh User
contoh model yang cocok dengan ID yang diberikan.
#Binding implisit
Laravel secara otomatis menyelesaikan model Eloquent yang didefinisikan dalam tindakan route atau pengontrol yang nama variabel tipenya cocok dengan nama segmen route. Sebagai contoh:
Route::get('api/users/{user}', function (AppUser $user) {
return $user->email;
});
Karena $user
variabel ditandai sebagai model Eloquent dan nama variabel cocok dengan segmen URI, Laravel akan secara otomatis menyuntikkan instance model yang memiliki ID yang cocok dengan nilai yang sesuai dari URI permintaan. Jika contoh model yang cocok tidak ditemukan dalam database, respons HTTP 404 akan secara otomatis dihasilkan.AppUser
{user}
#Menyesuaikan Key Name
Jika Anda ingin pengikatan model untuk menggunakan kolom database selain id
ketika mengambil kelas model yang diberikan, Anda dapat mengganti getRouteKeyName
metode pada model Eloquent:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
#Explicit Binding
Untuk mendaftarkan pengikatan eksplisit, gunakan metode router model
untuk menentukan kelas untuk parameter yang diberikan. Anda harus mendefinisikan binding model eksplisit Anda dalam boot
metode RouteServiceProvider
kelas:
public function boot()
{
parent::boot();
Route::model('user', AppUser::class);
}
Selanjutnya, tentukan rute yang berisi parameter:{user}
Route::get('profile/{user}', function (AppUser $user) {
//
});
Karena kita telah mengikat semua parameter ke model, sebuah instance akan disuntikkan ke dalam rute. Jadi, misalnya, permintaan untuk akan menyuntikkan instance dari database yang memiliki ID .{user}
AppUser
User
profile/1
User
1
Jika contoh model yang cocok tidak ditemukan dalam database, respons HTTP 404 akan dihasilkan secara otomatis.
Menyesuaikan Resolution Logic
Jika Anda ingin menggunakan logika resolusi Anda sendiri, Anda dapat menggunakan metode ini. Anda lolos ke metode akan menerima nilai segmen URI dan harus mengembalikan instance dari kelas yang harus disuntikkan ke rute:Route::bind
Closure
bind
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return AppUser::where('name', $value)->first() ?? abort(404);
});
}
Atau, Anda dapat mengganti resolveRouteBinding
metode pada model Eloquent Anda. Metode ini akan menerima nilai segmen URI dan harus mengembalikan instance kelas yang harus disuntikkan ke rute:
/**
* Retrieve the model for a bound value.
*
* @param mixed $value
* @return IlluminateDatabaseEloquentModel|null
*/
public function resolveRouteBinding($value)
{
return $this->where('name', $value)->first() ?? abort(404);
}
route laravel
route model binding
belajar laravel
tutorial laravel
laravel