Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel
Code

Cara Mendaftar & Mengunakan Penyedia Perkhidmatan Laravel

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Meyria (you can also view the original English article)

Jika anda pernah menjumpai rangka kerja Laravel, sangat tidak mungkin anda tidak pernah mendengar bekas perkhidmatan dan penyedia perkhidmatan. Malah, mereka adalah tulang belakang rangka kerja Laravel dan melakukan semua pengangkat berat apabila anda melancarkan suatu contoh apa-apa permohonan Laravel.

Dalam artikel ini, kita akan melihat sekilas mengenai apa perkhidmatan bekas itu, dan setelah itu kita akan membincangkan penyedia perkhidmatan secara terperinci. Dalam perjalanan artikel ini, saya juga akan menunjukkan cara membuat penyedia khidmat khusus di Laravel. Sebaik sahaja anda membuat pembekal perkhidmatan, anda juga perlu mendaftarkannya dengan aplikasi Laravel untuk benar-benar menggunakannya, jadi kami akan meneruskannya juga.

Terdapat dua kaedah penting, boot dan mendaftar, bahawa penyedia perkhidmatan anda boleh melaksanakan, dan dalam segmen terakhir artikel ini, kami akan membincangkan kedua-dua kaedah ini dengan teliti.

Sebelum kita menyelidiki perbincangan pembekal perkhidmatan, saya akan cuba memperkenalkan bekas perkhidmatan kerana ia akan banyak digunakan dalam pelaksanaan penyedia perkhidmatan anda.

Memahami Bekas Perkhidmatan dan Pembekal Perkhidmatan

Apa itu Container Perkhidmatan?

Dalam terma yang paling mudah, kita boleh mengatakan bahawa bekas perkhidmatan di Laravel adalah kotak yang memegang pelbagai pengikatan komponen, dan ia berfungsi seperti yang diperlukan sepanjang aplikasi.

Dalam kata-kata dokumentasi rasmi Laravel:

Bekas perkhidmatan Laravel adalah alat yang berkuasa untuk menguruskan kebergantungan kelas dan melakukan suntikan ketergantungan.

Oleh itu, apabila anda perlu menyuntik sebarang komponen atau perkhidmatan terbina dalam, anda boleh menaip petunjuk dalam pembina atau kaedah anda, dan ia akan disuntik secara automatik dari bekas perkhidmatan kerana ia mengandungi semua yang anda perlukan! Bukankah itu sejuk? Ia menjimatkan anda dari komponen instantiating secara manual dan dengan itu mengelakkan gandingan ketat dalam kod anda.

Mari kita lihat contoh pantas untuk memahaminya.

Seperti yang anda dapat lihat, SomeClass memerlukan contoh FooBar untuk menyatakannya sendiri. Jadi, pada dasarnya, ia mempunyai kebergantungan yang perlu disuntik. Laravel melakukannya secara automatik dengan melihat ke dalam bekas perkhidmatan dan menyuntik pergantungan yang sesuai.

Dan jika anda tertanya-tanya bagaimana Laravel tahu komponen atau perkhidmatan mana yang akan dimasukkan ke dalam bekas perkhidmatan, jawapannya adalah pembekal perkhidmatan. Ia adalah pembekal perkhidmatan yang memberitahu Laravel untuk mengikat pelbagai komponen ke dalam bekas perkhidmatan. Malah, ia dipanggil penyambungan bekas perkhidmatan, dan anda perlu melakukannya melalui pembekal khidmat.

Oleh itu pembekal khidmat yang mendaftarkan semua binding kontena perkhidmatan, dan ia dilakukan melalui kaedah daftar pelaksanaan penyedia perkhidmatan.

Itu sepatutnya membawa soalan lain di atas meja: bagaimana Laravel tahu mengenai pelbagai penyedia perkhidmatan? Adakah anda hanya mengatakan apa-apa? Saya baru sahaja mendengar seseorang yang mengatakan bahawa, Laravel juga harus memikirkannya secara automatik! Oh budak lelaki, itu terlalu banyak bertanya: Laravel adalah kerangka bukan superman, bukan? Memandangkannya, itu sesuatu yang anda perlu memberitahu Laravel dengan jelas.

Teruskan dan lihat kandungan fail config/app.php. Anda akan mendapati kemasukan pelbagai yang menyenaraikan semua penyedia perkhidmatan yang akan dimuatkan semasa bootstrapping aplikasi Laravel.

Oleh itu, itu adalah bekas perkhidmatan yang anda perlukan. Dari bahagian seterusnya dan seterusnya, kami akan memberi tumpuan kepada penyedia perkhidmatan, yang merupakan topik utama artikel ini!

Apakah Pembekal Perkhidmatan?

Jika bekas perkhidmatan adalah sesuatu yang membolehkan anda menentukan pengikatan dan menyuntik kebergantungan, maka pembekal khidmat adalah tempat di mana ia berlaku.

Mari kita lihat di salah satu penyedia perkhidmatan teras untuk memahami apa yang berlaku. Teruskan dan buka fail vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php.

Perkara penting yang perlu diperhatikan di sini ialah kaedah register, yang membolehkan anda menentukan pengikat bekas perkhidmatan. Seperti yang anda lihat, terdapat tiga pengikat bagi cache, cache.store dan perkhidmatan memcached.connector.

Pada dasarnya, kami memaklumkan Laravel bahawa apabila terdapat keperluan untuk menyelesaikan entri cache, ia harus mengembalikan contoh CacheManager. Jadi kami hanya menambah sejenis pemetaan di dalam bekas perkhidmatan yang boleh diakses menerusi $this->app.

Ini adalah cara yang betul untuk menambah perkhidmatan kepada bekas perkhidmatan Laravel. Itu juga membolehkan anda merealisasikan gambaran yang lebih besar tentang bagaimana Laravel menerusi kaedah daftar semua penyedia perkhidmatan dan memungut kontena perkhidmatan! Dan seperti yang telah kita sebutkan tadi, ia memungut senarai pembekal perkhidmatan dari fail config/app.php.

Dan itulah kisah penyedia perkhidmatan. Di bahagian seterusnya, kami akan membincangkan cara membuat pembekal khidmat tersuai supaya anda boleh mendaftarkan perkhidmatan tersuai anda ke dalam bekas perkhidmatan Laravel.

Buat Penyedia Perkhidmatan Tersuai Anda

Laravel sudah dilengkapi dengan alat utiliti arahan atas tangan, artisan, yang membolehkan anda membuat kod template supaya anda tidak perlu menciptanya dari awal. Teruskan dan beralih ke baris arahan dan jalankan arahan berikut dalam akar aplikasi anda untuk membuat pembekal khidmat tersuai.

Dan itu harus membuat fail EnvatoCustomServiceProvider.php di bawah direktori app/Providers. Buka fail untuk melihat ptautannya.

Seperti yang telah dibincangkan sebelumnya, terdapat dua kaedah, boot dan mendaftar, yang anda akan berurusan dengan kebanyakan masa ketika anda bekerja dengan penyedia kustom anda.

Kaedah pendaftaran adalah tempat di mana anda menentukan semua pengikat bekas perkhidmatan khidmat anda. Sebaliknya, kaedah boot adalah tempat di mana anda boleh menggunakan perkhidmatan terdaftar melalui kaedah daftar. Dalam segmen terakhir artikel ini, kami akan membincangkan kedua-dua kaedah secara terperinci kerana kami akan meneruskan beberapa kes penggunaan praktikal untuk memahami penggunaan kedua-dua kaedah tersebut.

Daftar Penyedia Perkhidmatan Tersuai Anda

Oleh itu, anda telah mencipta pembekal khidmat anda. Itu hebat! Seterusnya, anda perlu memaklumkan kepada Laravel tentang pembekal khidmat tersuai anda supaya ia dapat memuatkannya bersama pembekal perkhidmatan lain semasa bootstrapping.

Untuk mendaftarkan pembekal khidmat anda, anda hanya perlu menambah kemasukan ke pelbagai pembekal perkhidmatan dalam fail config/app.php.

Dan itu sahaja! Anda telah mendaftarkan penyedia perkhidmatan anda dengan skema perkara Laravel! Tetapi penyedia perkhidmatan yang kami buat hampir kosong dan tidak digunakan pada masa ini. Di bahagian seterusnya, kami akan meneruskan beberapa contoh praktikal untuk melihat apa yang boleh anda lakukan dengan kaedah daftar dan boot.

Pergi Melalui Kaedah Daftar dan Boot

Untuk memulakan, kami akan melalui kaedah daftar untuk memahami bagaimana anda boleh menggunakannya. Buka pembekal perkhidmatan app/Providers/EnvatoCustomServiceProvider.php yang telah dibuat sebelum ini dan gantikan kod yang sedia ada dengan yang berikut.

Terdapat dua perkara penting yang perlu diperhatikan di sini:

  • Kami telah mengimport App\Library\Services\DemoOne supaya kami boleh menggunakannya. Kelas DemoOne belum dicipta, tetapi kami akan melakukannya dalam seketika.
  • Dalam kaedah daftar, kami telah menggunakan kaedah mengikat bekas perkhidmatan untuk menambah pengikat perkhidmatan kami. Oleh itu, apabila aplikasi App\Library\Services\DemoOne perlu diselesaikan, ia akan memanggil fungsi penutupan, dan ia memberi instantiate dan mengembalikan aplikasi App\Library\Services\DemoOne.

Jadi anda hanya perlu membuat fail aplikasi/Perpustakaan/Perkhidmatan/DemoOne.php untuk berfungsi.

Dan di sini adalah kod di suatu tempat di dalam pengawal anda di mana pergantungan akan disuntik.

Itulah contoh yang sangat mudah mengikat kelas. Malah, dalam contoh di atas, tidak perlu membuat pembekal perkhidmatan dan melaksanakan kaedah daftar seperti yang kita lakukan, kerana Laravel secara automatik boleh menyelesaikannya menggunakan pantulan.

Satu nota penting dari dokumentasi Laravel:

Tidak perlu mengikat kelas ke dalam bekas jika mereka tidak bergantung pada mana-mana antara muka. Kontena tidak perlu diarahkan bagaimana membina objek ini, kerana ia secara automatik dapat menyelesaikan objek ini menggunakan pantulan.

Sebaliknya, ia pasti berguna sekiranya anda telah mengikat antara muka dengan pelaksanaan tertentu. Mari kita meneruskan satu contoh untuk memahaminya.

Mari buat antara muka yang sangat mudah di app/Library/Services/Contracts/CustomServiceInterface.php.

Seterusnya, mari buat dua pelaksanaan konkrit antara muka ini. Pada dasarnya, kita hanya perlu membuat dua kelas yang memperluaskan antara muka CustomServiceInterface.

Buat kelas DemoOne dalam aplikasi/Perpustakaan/Perkhidmatan/DemoOne.php.

Begitu juga, DemoTwo masuk app/Library/Services/DemoTwo.php.

Sekarang, bukan mengikat kelas, kami akan mengikat antara muka. Revisit EnvatoCustomServiceProvider.php dan ubah kod seperti ditunjukkan di bawah.

Dalam kes ini, kami telah terikat dengan aplikasi App\Library\Services\Contracts\CustomServiceInterface kepada pelaksanaan DemoOne. Oleh itu, apabila App\Library\Services\Contracts\Deployment CustomServiceInterface perlu diselesaikan, ia memberi instantiate dan mengembalikan aplikasi App\Library\Services\DemoOne. Kini ia lebih masuk akal, bukan?

Mari kita semak semula kod pengawal dengan cepat.

Seperti yang anda mungkin fikirkan, $customServiceInstance seharusnya menjadi contoh App\Library\Services\DemoOne! Keindahan pendekatan ini ialah anda boleh menukar pelaksanaan DemoOne dengan yang lain dengan mudah.

Katakan anda mahu menggunakan pelaksanaan DemoTwo dan bukannya DemoOne. Dalam hal ini, anda hanya perlu membuat perubahan berikut dalam penyedia perkhidmatan EnvatoCustomServiceProvider.php.

Cari baris berikut:

Dan gantikannya dengan:

Begitu juga, cari yang satu ini:

Yang perlu diganti dengan:

Pendekatan yang sama boleh digunakan sekiranya anda ingin menggantikan pelaksanaan inti dengan anda sendiri. Dan bukan hanya kaedah ikatan yang boleh anda gunakan untuk pengikat bekas perkhidmatan anda; Kontena perkhidmatan Laravel menyediakan pelbagai cara untuk mengikat kontena perkhidmatan. Sila semak dokumentasi rasmi Laravel untuk rujukan lengkap.

Calon berikutnya adalah kaedah boot, yang boleh digunakan untuk memanjangkan fungsi teras Laravel. Dalam kaedah ini, anda boleh mengakses semua perkhidmatan yang didaftarkan menggunakan kaedah daftar pembekal khidmat. Dalam kebanyakan kes, anda ingin mendaftarkan pendengar acara anda dalam kaedah ini, yang akan dicetuskan apabila sesuatu berlaku.

Mari kita lihat beberapa contoh yang memerlukan pelaksanaan kaedah boot.

Anda ingin menambah validator medan borang tersuai anda kepada Laravel.

Sekiranya anda ingin mendaftarkan komposer paparan, itu adalah tempat yang sempurna untuk melakukannya! Malah, kita boleh mengatakan bahawa kaedah boot sering digunakan untuk menambah komposer paparan!

Sudah tentu, anda ingin mengimport fasad Illuminate\Support\Facades\View di pembekal khidmat anda di tempat pertama.

Dalam wilayah yang sama, anda boleh berkongsi data dalam pelbagai pandangan juga!

Ia juga boleh digunakan untuk menentukan pengikatan model yang jelas.

Ini adalah beberapa contoh untuk menunjukkan penggunaan kaedah boot. Semakin anda masuk ke Laravel, semakin banyak alasan yang anda akan dapat untuk melaksanakannya!

Dan dengan itu, kami telah sampai ke penghujung artikel ini. Saya harap anda telah menikmati topik yang dibincangkan sepanjang artikel ini.

Kesimpulan

Ini adalah perbincangan tentang pembekal perkhidmatan yang merupakan tarikan pusat artikel ini, walaupun kami memulakan artikel kami dengan wadah perkhidmatan kerana itu merupakan ramuan penting untuk memahami pembekal perkhidmatan.

Berikutan itu, kami membangunkan pembekal khidmat tersuai, dan pada separuh akhir artikel kami melalui beberapa contoh praktikal.

Bagi anda yang baru sahaja bermula dengan Laravel atau ingin memperluaskan pengetahuan, laman web atau aplikasi dengan sambungan, kami mempunyai pelbagai perkara yang anda boleh belajar di Envato Market.

Jika anda mempunyai sebarang pertanyaan atau komen, hanya menembak menggunakan suapan di bawah!

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.