Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Laravel
Code

Cara Mendaftar & Mengunakan Penyedia Layanan Laravel

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Imam Firmansyah (you can also view the original English article)

Jika Anda pernah menemukan kerangka kerja Laravel, sangat tidak mungkin Anda belum pernah mendengar tentang wadah servis dan penyedia layanan. Sebenarnya, ini adalah tulang punggung kerangka kerja Laravel dan melakukan semua pengangkatan berat saat Anda meluncurkan contoh aplikasi Laravel.

Pada artikel ini, kita akan melihat sekilas tentang isi wadah layanan, dan setelah itu kita akan membahas penyedia layanan secara rinci. Dalam perjalanan artikel ini, saya juga akan menunjukkan bagaimana membuat penyedia layanan kustom di Laravel. Begitu Anda membuat penyedia layanan, Anda juga perlu mendaftarkannya dengan aplikasi Laravel agar benar-benar menggunakannya, jadi kami akan melakukannya juga.

Ada dua metode penting, boot dan register, yang dapat diterapkan oleh penyedia layanan Anda, dan di bagian akhir artikel ini kita akan membahas kedua metode ini secara menyeluruh.

Sebelum kami menyelami pembahasan tentang penyedia layanan, saya akan mencoba mengenalkan wadah layanan karena akan banyak digunakan dalam implementasi penyedia layanan Anda.

Pahami Service Containers dan Service Providers

Apa itu Service Container?

Dalam istilah yang paling sederhana, kita bisa mengatakan bahwa wadah servis di Laravel adalah kotak yang menampung berbagai komponen 'binding, dan mereka disajikan sesuai kebutuhan selama aplikasi berlangsung.

Dalam kata-kata dokumentasi resmi Laravel:

Laravel service container adalah alat yang ampuh untuk mengelola ketergantungan kelas dan melakukan injeksi ketergantungan.

Jadi, kapanpun Anda perlu menyuntikkan komponen atau layanan built-in, Anda bisa mengetikkan petunjuk pada konstruktor atau metode Anda, dan itu akan disuntikkan secara otomatis dari wadah servis karena berisi semua yang Anda butuhkan!  Bukankah itu keren? Ini menghemat Anda dari instantiating komponen secara manual dan dengan demikian menghindari kopling ketat dalam kode Anda.

Mari kita lihat contoh singkat untuk memahaminya. 

Seperti yang Anda lihat, SomeClass membutuhkan sebuah instance dari FooBar untuk memberi instantiate sendiri. Jadi, pada dasarnya, ia memiliki ketergantungan yang perlu disisipkan. Laravel melakukan ini secara otomatis dengan melihat ke dalam wadah servis dan menyuntikkan ketergantungan yang sesuai. 

Dan jika Anda bertanya-tanya bagaimana Laravel mengetahui komponen atau layanan mana yang termasuk dalamservice container, jawabannya adalah service provider. Ini adalah service provider yang memberitahu Laravel untuk mengikat berbagai komponen ke dalam service provider. Sebenarnya, ini disebut service container bindings, dan Anda perlu melakukannya melalui service provider.

Jadi, service provider  yang mencatat semua binding kontainer layanan, dan itu dilakukan melalui metode register implementasi service provider .

Itu harus membawa pertanyaan lain di atas meja: bagaimana Laravel tahu tentang berbagai penyedia layanan? Apakah kamu hanya mengatakan sesuatu? Aku baru saja mendengar seseorang mengatakan itu, Laravel harus memikirkannya secara otomatis juga!  Oh boy, itu terlalu banyak untuk ditanyakan: Laravel adalah kerangka kerja bukan superman, bukan? Kidding terpisah, itu adalah sesuatu yang Anda butuhkan untuk menginformasikan Laravel secara eksplisit.

Silakan lihat isi file config/app.php. Anda akan menemukan entri array yang mencantumkan semua penyedia layanan yang akan dimuat saat bootstrap aplikasi Laravel.

Jadi, itu adalah wadah servis yang Anda inginkan. Dari bagian selanjutnya dan seterusnya, kita akan fokus pada penyedia layanan, yang merupakan topik utama artikel ini!

Apa itu Service Provider?

Jika wadah servis adalah sesuatu yang memungkinkan Anda menentukan binding dan menyuntikkan dependensi, maka penyedia layanan adalah tempat terjadinya.

Mari kita lihat sekilas salah satu penyedia layanan inti untuk memahami apa yang dilakukannya. Silakan buka file vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php 

Yang penting untuk dicatat di sini adalah metode register, yang memungkinkan Anda untuk menentukan binding kontainer layanan. Seperti yang bisa Anda lihat, ada tiga binding untuk cachecache.store dan memcached.connector services.

Pada dasarnya, kami menginformasikan Laravel bahwa setiap kali ada kebutuhan untuk menyelesaikan entri cache, seharusnya mengembalikan instance CacheManager. Jadi, kami hanya menambahkan semacam pemetaan dalam wadah layanan yang dapat diakses melalui $this->app.

Ini adalah cara yang tepat untuk menambahkan layanan ke wadah layanan Laravel. Itu juga memungkinkan Anda untuk mewujudkan gambaran yang lebih besar tentang bagaimana Laravel menjalani metode pendaftaran semua penyedia layanan dan mengisi wadah layanan! Dan seperti yang telah kami sebutkan sebelumnya, ia mengambil daftar penyedia layanan dari file config/app.php.

Dan itulah kisah penyedia layanan. Pada bagian selanjutnya, kita akan membahas bagaimana membuat penyedia layanan kustom sehingga Anda dapat mendaftarkan layanan kustom Anda ke dalam wadah layanan Laravel.

Membuat Custom Service Provider Anda

Laravel sudah dilengkapi dengan tool utilitas command-on command-line, artisan, yang memungkinkan Anda membuat kode template sehingga Anda tidak perlu membuatnya dari awal. Lanjutkan dan pindah ke command line dan jalankan perintah berikut di root aplikasi Anda untuk membuat custom service provider.

Dan itu harus membuat file EnvatoCustomServiceProvider.php bawah direktori app/Providers. Buka file untuk melihat apa yang dimilikinya.

Seperti yang telah kita bahas sebelumnya, ada dua metode, boot dan register, bahwa Anda akan berurusan dengan sebagian besar waktu saat Anda bekerja dengan penyedia layanan kustom Anda. 

Metode register adalah tempat Anda mendefinisikan semua binding container layanan kustom Anda. Di sisi lain, metode boot adalah tempat di mana Anda bisa mengkonsumsi layanan yang sudah terdaftar melalui metode register.  i segmen terakhir artikel ini, kita akan membahas dua metode ini secara rinci karena kita akan membahas beberapa kasus penggunaan praktis untuk memahami penggunaan kedua metode tersebut.

Mendaftarkan Custom Service Provider Anda

Jadi Anda telah membuat penyedia layanan kustom Anda. Itu hebat!Selanjutnya, Anda perlu menginformasikan Laravel tentang penyedia layanan kustom Anda sehingga dapat memuatnya bersama dengan penyedia layanan lainnya saat melakukan bootstraping.

Untuk mendaftarkan penyedia layanan Anda, Anda hanya perlu menambahkan entri ke jajaran penyedia layanan di file config/app.php.

Dan itu dia! Anda telah mendaftarkan penyedia layanan Anda dengan skema hal-hal Laravel! Tapi penyedia layanan yang telah kami buat hampir merupakan template kosong dan tidak ada gunanya saat ini.  Pada bagian selanjutnya, kita akan melalui beberapa contoh praktis untuk melihat apa yang dapat Anda lakukan dengan metode register dan boot. 

Pergi melalui metode Register and Boot

Untuk mulai dengan, kita akan melalui metode register untuk memahami bagaimana Anda benar-benar bisa menggunakannya. Buka app/Providers/EnvatoCustomServiceProvider.php file penyedia yang telah dibuat sebelumnya dan ganti kode yang ada dengan yang berikut.

Ada dua hal penting yang perlu diperhatikan disini:

  • Kami telah mengimpor App\Library\Services\DemoOne agar kami dapat menggunakannya. Kelas DemoOne belum dibuat, tapi kami akan melakukannya dalam sekejap.
  • Dalam metode register, kami telah menggunakan metode bind dari wadah layanan untuk menambahkan wadah kontainer layanan kami.Jadi, kapan pun ketergantungan App\Library\Services\DemoOne perlu diselesaikan, maka akan memanggil fungsi penutupan, dan ini akan memberi instantiate dan mengembalikan objek App\Library\Services\DemoOne.

Jadi Anda hanya perlu membuat file app/Library/Services/DemoOne.php agar bisa bekerja.

Dan inilah kode di suatu tempat di controller Anda dimana ketergantungan akan disisipkan.

Itu adalah contoh yang sangat sederhana untuk mengikat sebuah kelas.Sebenarnya, dalam contoh di atas, tidak perlu membuat penyedia layanan dan menerapkan metode register seperti yang kita lakukan, karena Laravel dapat mengatasinya secara otomatis dengan menggunakan refleksi.

Catatan yang sangat penting dari dokumentasi Laravel:

Tidak perlu mengikat kelas ke dalam wadah jika tidak bergantung pada antarmuka apa pun. Wadah tidak perlu diinstruksikan tentang bagaimana membangun benda-benda ini, karena secara otomatis benda tersebut dapat diobati dengan menggunakan refleksi.

Di sisi lain, akan sangat berguna jika Anda telah mengikat sebuah antarmuka ke implementasi tertentu. Mari kita melalui sebuah contoh untuk memahaminya.

Mari buat antarmuka yang sangat sederhana di app/Library/Services/Contracts/CustomServiceInterface.php.

Selanjutnya, mari kita buat dua implementasi konkret dari antarmuka ini. Pada dasarnya, kita hanya perlu membuat dua kelas yang memperluas antarmuka CustomServiceInterface.

Buat kelas DemoOne di app/Library/Services/DemoOne.php.

Demikian pula, DemoTwo masukkan ke app/Library/Services/DemoTwo.php.

Sekarang, alih-alih mengikat kelas, kita akan mengikat sebuah antarmuka. EnvatoCustomServiceProvider.php dan ubah kode seperti gambar di bawah ini.

Dalam kasus ini, kami telah mengikat antarmuka App\Library\Services\Contracts\CustomServiceInterface ke implementasi DemoOne.  Oleh karena itu, kapan pun ketergantungan App\Library\Services\Contracts\CustomServiceInterface perlu diselesaikan, instantiate dan mengembalikan objek App\Library\Services\DemoOne. Sekarang lebih masuk akal, bukan?

Mari kita cepat merevisi kode controller juga.

Seperti yang mungkin sudah Anda duga, $customServiceInstance harus menjadi instance dari App\Library\Services\DemoOne ! Keindahan dari pendekatan ini adalah Anda bisa menukar implementasi DemoOne dengan yang lain dengan mudah. 

Katakanlah Anda ingin menggunakan implementasi DemoTwo alih-alih DemoOne. Dalam hal ini, Anda hanya perlu melakukan perubahan berikut pada penyedia layanan EnvatoCustomServiceProvider.php.

Temukan baris berikut ini:

Dan ganti dengan:

Demikian pula, temukan yang ini:

Itu harus diganti dengan:

Pendekatan yang sama bisa digunakan seandainya Anda ingin mengganti implementasi inti dengan Anda sendiri. Dan bukan hanya metode mengikat yang bisa Anda gunakan untuk kemasan wadah layanan Anda; Kontainer layanan Laravel menyediakan berbagai cara untuk mengikat wadah layanan. Silakan periksa dokumentasi resmi Laravel untuk referensi lengkap.

Calon berikutnya adalah metode boot, yang bisa Anda gunakan untuk memperluas fungsi inti Laravel. Dengan metode ini, Anda bisa mengakses semua layanan yang terdaftar dengan menggunakan metode register dari penyedia layanan.  Dalam kebanyakan kasus, Anda ingin mendaftarkan pendengar acara Anda dalam metode ini, yang akan dipicu saat terjadi sesuatu.

Mari kita lihat beberapa contoh yang memerlukan implementasi metode boot.

Anda ingin menambahkan validator lapangan formulir kustom Anda sendiri ke Laravel.

Jika Anda ingin mendaftarkan komposer tampilan, itu adalah tempat yang tepat untuk melakukan itu! Sebenarnya, kita bisa mengatakan bahwa metode booting sering digunakan untuk menambahkan komposer tampilan!

Tentu saja, Anda ingin mengimpor fasad Illuminate\Support\Facades\View di penyedia layanan Anda di tempat pertama.

Di wilayah yang sama, Anda juga dapat berbagi data dengan berbagai tampilan!

Ini juga dapat digunakan untuk mendefinisikan bindings model eksplisit.

Ini adalah beberapa contoh untuk menunjukkan penggunaan metode booting.Semakin Anda masuk ke Laravel, semakin banyak alasan yang akan Anda temukan untuk menerapkannya!

Dan dengan itu, kita sudah sampai pada akhir artikel ini. Saya harap Anda menikmati topik yang dibahas di sepanjang artikel ini.

Kesimpulan

Itu adalah diskusi penyedia layanan yang menjadi daya tarik utama artikel ini, walaupun kami memulai artikel kami dengan wadah layanan karena itu adalah bahan penting untuk memahami penyedia layanan.

Setelah itu, kami mengembangkan penyedia layanan kustom, dan di paruh kedua artikel kami melalui beberapa contoh praktis.

Bagi Anda yang baru saja memulai dengan Laravel atau ingin memperluas pengetahuan, situs, atau aplikasi Anda dengan ekstensi, kami memiliki berbagai hal yang dapat Anda pelajari di Envato Market.

Jika Anda memiliki pertanyaan atau komentar, cukup tembak dengan menggunakan umpan di bawah ini!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.