Setup Menus in Admin Panel

Laravel Service Container #3 (Contextual Binding & Container Events)

Di part sebelumnya yaitu Laravel Service Container #2 (Basic Resolving & Interface Binding) saya bilang akan membahas Contextual Binding & Container events pada part ini, Baiklah, Saya akan membahasnya sekarang.

Contextual binding pada dasarnya sama saja dengan basic binding dan lainya, hanya saja, Contextual binding bisa memberikan implementasi yang berbeda dari 1 interface yang sama, misalnya saja, saat kamu membeli smartphone baru, Lalu sim card 2 kamu pindahkan ke smartphone yang baru, maka Contextual Binding dapat kamu gunakan seperti dibawah ini.

Smartphone2.php

<?php 

namespace App\Kodinger; 

use App\Kodinger\Sim\Sim;

class Smartphone2 {

    protected $baterai;

    protected $simCard;

    public function __construct(Baterai $baterai, Sim $simCard) {
        $this->baterai = $baterai;
        $this->simCard = $simCard;
    }

    public function cekBateraiPercent() {
        return $this->baterai->percentage();
    }

    public function kuota() {
        return $this->simCard->cekKuota();
    }

    public function pulsa() {
        return $this->simCard->cekPulsa();
    }

}

AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Kodinger\Sim\Sim1;
use App\Kodinger\Sim\Sim2;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->when('App\Kodinger\Smartphone')
                  ->needs('App\Kodinger\Sim\Sim')
                  ->give(Sim1::class);

        $this->app->when('App\Kodinger\Smartphone2')
                  ->needs('App\Kodinger\Sim\Sim')
                  ->give(Sim2::class);
    }
}

Maka hasilnya akan seperti dibawah ini!

See? Cool Isn’t it! Sim 2 kini sudah dipasang di Smartphone 2 yaitu smartphone yang baru kamu beli wkwkwkwk. Next!

Container Events

Begitu populernya Event Based Programming seperti saat kamu menggunakan jQuery

$('#btn-submit').on('click', function() {
   $.ajax({....});
});

Begitu juga dengan Service Container, dia gak mau kalah wkwkwk, Konsep Container Event juga hampir sama dengan jQuery yaitu saat Event yang di listen di eksekusi maka Listener akan di eksekusi juga, (Lah emang konsep Event Listener kan begitu…. ).

Container Events memiliki 2 tipe, yaitu event untuk spesifik Object atau event untuk semua object. Jadi seperti ini, Saat kita listen ke object App\Kodinger\Sim\Sim maka, setiap kalo Object tersebut di-resolve maka kode listener kita akan di eksekusi, tapi saat kita listen ke semua object, maka setiap terjadi proses resolving maka listener tersebut akan di eksekusi, tidak peduli object apa pun yang di-resolve.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Kodinger\Sim\Sim1;
use App\Kodinger\Sim\Sim2;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->when('App\Kodinger\Smartphone')
                  ->needs('App\Kodinger\Sim\Sim')
                  ->give(Sim1::class);

        $this->app->when('App\Kodinger\Smartphone2')
                  ->needs('App\Kodinger\Sim\Sim')
                  ->give(Sim2::class);

        // Akan di eksekusi apabila App\Kodinger\Sim\Sim di-resolve
        $this->app->resolving('App\Kodinger\Sim\Sim', function($object, $app) {
            \Log::info('resolving sim!');
        });

        // Akan di eksekusi apabila terjadi proses resolving
        $this->app->resolving(function($object, $app) {
            // kode yang akan di eksekusi
        });
    }
}

Maka saat kita menggunakan object Smartphone yang notabene nya membutuhkan sim untuk di-resolve maka, Listener nya akan di eksekusi!

Nah seperti itulah cara kerja Contextual Binding & Container Events!, Silahkan explore fitur-fitur Laravel yang belum pernah kamu coba! Amati, CoPast, Kembangkan!

Ini adalah part akhir dari Laravel Service Container, Jika ada yang belum di mengerti atau ada yang miss dalam penjelasan saya silahkan tinggalkan komentar atau kontak saya (FB, Email).

~ And Don’t Forget, Always Out Of The Box!

 

Final code bisa kamu lihat di https://github.com/itskodinger/laravel-service-container/

Digital Ocean baner

February 19, 2018
Copyright © Kodinger 2018. Powered by Multinity

X