Laravel Service Container Untuk Dummy - CRUDPRO

Laravel Service Container Untuk Dummy

Service Providers dan Service Container adalah bagian penting dari kerangka kerja. Mari selami apa itu, apa yang dapat mereka lakukan, dan bagaimana mereka dapat digunakan untuk membangun aplikasi yang sangat mudah dirawat.

Dokumentasi Laravel adalah salah satu yang terbaik yang pernah saya temui, tetapi ini bisa sangat teknis bagi mereka yang baru memulai. Mari kita uraikan konsep inti kerangka kerja ini.

The Service Container:

Laravel service container adalah alat yang ampuh untuk mengelola dependensi kelas dan melakukan injeksi dependensi. Injeksi ketergantungan adalah frasa mencolok yang pada dasarnya berarti ini. Dependensi kelas "disuntikkan" ke dalam kelas melalui konstruktor atau, dalam beberapa kasus, metode "setter".

Sederhananya, Laravel service container adalah container yang menampung kelas-kelas yang diselesaikan secara terprogram (diinstansiasi) nanti dalam aplikasi.

Service Provider:

Service provider adalah lokasi sentral untuk bootstrap untuk semua aplikasi Laravel. Aplikasi Anda sendiri dan semua layanan inti Laravel di-bootstrap melalui penyedia layanan Anda.

Sederhananya, Service Provider digunakan untuk mendaftarkan kelas dengan service container. Ini memungkinkan Anda untuk melakukan fitur-fitur hebat seperti injeksi ketergantungan dan pengikatan ke antarmuka.

Bagaimana cara menggunakannya?

Misalnya, aplikasi Anda ingin mengirim pesan melalui saluran serval. SMS, email, pemberitahuan push, slack, dan lainya ... Anda mendapatkan ide?.

Mari buat kelas untuk mengirim pesan SMS
<?php
namespace App\Services;

use SomeSmsProvider\Client;

class SmsService implements MessageInterface
{
    protected $smsProvider;
    
    public function __construct(Client $smsProvider)
    {
        $this->smsProvider = $smsProvider;
    }
    
    public function send($message)
    {
        return $this->smsProvider->send($message)
    }
}
<?php
namespace App\Services;

interface MessageInterface
{

    public function send(string $message);
}
Selanjutnya, mari kita buat Service Provider menggunakan perintah artisan php artisan make:providerSmsServiceProvider
<?php
namespace App\Providers;
use App\Services\SmsService;
use Illuminate\Support\ServiceProvider;
class SmsServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('SmsService', function($app){
            return new SmsService;
        });
    }
}

Metode register adalah tempat Anda mendaftarkan layanan dengan service container. Pada dasarnya, kami hanya mengatakan Laravel, perhatikan kelas SmsService. Anda akan membutuhkan instance nanti. Sangat sederhana

Kemudian tambahkan penyedia layanan ke array $provider di config/app.php
<?php
 return [
   'providers' => [
      
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        \App\Providers\SmsServiceProvider::class
    ],
 ];

Baris 9 menggunakan fungsi pembantu study_case laravel untuk mengonversi variabel $service menjadi nama kelas layanan untuk mendapatkan nama layanan yang akan digunakan sesuai dengan konvensi penamaannya sendiri. Konvensi tentang konfigurasi

Baris 11 adalah tempat Anda menyelesaikan layanan dari container. Jika Anda mengirimkan sms ke sendMessage() sebagai $service, itu akan menjadi Layanan SMS. Kemudian beri tahu laravel untuk membuat turunan dari kelas itu dan panggil metode kirim di kelas itu.

Berikut ini ikhtisar tentang bagaimana sebuah container menyelesaikan kelas:

Dalam implementasi saat ini, Anda ingin mengirim pesan ke aplikasi seluler Anda melalui pemberitahuan push. Yang perlu Anda lakukan adalah mengikuti langkah-langkah ini:

  1. Buat PushNotificationService yang mengimplementasikan MessageInterface
  2. Buat PushNotificationServiceProvider dan daftarkan di array penyedia.
  3. Lewati push_notification sebagai $services ke sendMessage() dari MessageService

Bagaimana sangat sederhana bukan ? Perhatikan bahwa kami dapat dengan mudah memperluas fungsionalitas layanan pesan tanpa mengubah implementasi saat ini. Sungguh menakjubkan, Ini hanyalah bagian dari apa yang dapat Anda lakukan dengan penyedia layanan laravel Anda.