Menggunakan Fitur Route Model Binding (Implicit Binding,Explicit Binding)

joesep 2019-09-02 117

#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}AppUserUserprofile/1User1

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::bindClosurebind

/**
 * 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);
}

Rekomendasi Artikel


Terbaru dari framework Laravel



Search


Top Stories


  1. Membuat Perulangan Segitiga Bintang Dengan PHP

    on 2018-01-12

  2. Membatasi Jumlah Karakter dengan PHP

    on 2018-01-23

  3. Kenapa Telinga Gatal dan Berair

    on 2018-04-13

  4. Membuat Tanggal dan Zona Waktu Sederhana dengan PHP

    Admin on 2017-11-26

  5. Membuat Paragraf Otomatis dengan Script PHP

    on 2018-01-26

Other Post


Top Videos


  1. Founder SB1M dan Pemilik Distro BLOOP ini BANGKIT dari BANGKRUT 16x dan HUTANG 11M | Christina Lie

    joesep on 2019-06-04

  2. vivo Z1 Pro VS OPPO A9 2020 | Duel HP 3 Jutaan Terbaik 2019!

    joesep on 2019-09-26

  3. FILM Horor Terbaru "SABRINA THE DOLL 2" Full Movie 2018

    Andri03 on 2018-08-01

  4. Sandiaga Uno Resmi Mundur dari Ketua Tim Pemenangan Partai Gerindra

    joesep on 2018-07-31

  5. Aplikasi Kasir Point of Sale Restoran / Kafe Berbasis WEB

    joesep on 2018-08-15

close