Artikel

Panyedhiya Layanan ing Laravel: apa iku lan carane nggunakake Panyedhiya Layanan ing Laravel

Panyedhiya layanan Laravel minangka papan utama ing ngendi aplikasi diwiwiti. Yaiku, layanan inti Laravel lan layanan aplikasi, kelas, lan dependensi diselehake ing wadhah layanan liwat panyedhiya. 

Ing tembung liya, panyedhiya layanan kaya corong sing diwutahake bahan bakar "kelas" menyang tangki sing diarani "wadhah layanan" mesin sing diarani Laravel.

contone

Yen kita mbukak config/app.php kita bakal weruh larik kanthi jeneng "panyedhiya"

'providers' => [

        /*
        * Laravel Framework Service Providers...
        */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        .
        .
        .
],

Iki minangka sawetara panyedhiya layanan sing diwenehake bebarengan karo laravel, yaiku layanan dhasar sing diselehake ing wadhah layanan.

Nalika aku service provider padha dileksanakake?

Yen kita ndeleng dokumentasi ing siklus urip request , file ing ngisor iki dieksekusi ing wiwitan:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php lan kang Middlewares
  • Service Providers: isi artikel iki

Kang service provider padha dimuat? 

Padha sing definites ing larik config/app.php:

return [
 
    // ... other configuration values
 
    'providers' => [
 
        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
 
        // ... other framework providers from /vendor
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,
 
        /*
         * PUBLIC Service Providers - the ones we mentioned above
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
 
    ],
 
];

Minangka kita bisa ndeleng, ana dhaptar service provider ora umum ing folder kasebut /vendor, kita ora kudu ndemek utawa ngowahi. Sing kapentingan kita ing ngisor iki, karo BroadcastServicerProvider dipatèni minangka standar, mbokmenawa amarga iku arang digunakake.

Kabeh panyedhiya layanan iki mbukak saka ndhuwur nganti ngisor, mbaleni dhaptar kaping pindho:

  • Pengulangan pisanan nggoleki cara opsional register(), migunani kanggo (pungkasane) nglakokake soko sing dikonfigurasi sadurunge metode kasebut boot().
  • pengulangan kapindho nglakokake metode kasebut boot() saka kabeh panyedhiya. Maneh, siji-siji, ndhuwur nganti ngisor, saka larik 'providers'.
  • Pungkasan, sawise kabeh panyedhiya layanan wis diproses, Laravel pindhah menyang parsing path (rute), mbukak controller, nggunakake template, etc.

Panyedhiya Layanan Laravel pradefiuga ora

I Service Providers kalebu ing Laravel, kabeh sing ana ing folder kasebut app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Iku kabeh kelas PHP, saben ana hubungane karo topik dhewe: App, Auth, Broadcasting, Events e Routes. Nanging kabeh padha duwe siji bab: cara boot().

Ing cara kasebut, kita bisa nulis kode apa wae sing ana gandhengane karo bagean kasebut: auth, events, route, lsp. Ing tembung liyane, Service Provider mung kelas kanggo ndhaftar sawetara fungsi global.

Padha kapisah minangka "panyedhiya" amarga padha mbukak banget awal ing siklus urip aplikasi, supaya soko global trep kene sadurunge script eksekusi tekan Models utawa Controllers.

Umume fungsi ana ing RouteServiceProvider, iki kode:

class RouteServiceProvider extends ServiceProvider
{
    public const HOME = '/dashboard';
 
    public function boot()
    {
        $this->configureRateLimiting();
 
        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->group(base_path('routes/api.php'));
 
            Route::middleware('web')
                ->group(base_path('routes/web.php'));
        });
    }
 
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
        });
    }
}

Iki minangka kelas ing ngendi file dikonfigurasi routekaro routes/web.phproutes/api.php klebu standardefinita. Elinga yen kanggo API uga ana konfigurasi sing beda: Awalan Endpoint /api lan middleware api kanggo kabeh routes.

Kita bisa nyunting service providers, sing ora ana ing folder kasebut /vendor. Ngatur file iki rampung yen sampeyan duwe akeh dalan lan pengin misahake menyang file tartamtu. Sampeyan nggawe routes/auth.php lan sijine dalan ing kana, banjur sampeyan "ngaktifake" file kasebut ing metode kasebut boot() di RouteServiceProvider, mung nambahake ukara katelu:

`Route::middleware('web') // or maybe you want another middleware?
    ->group(base_path('routes/auth.php'));

AppServiceProvider iku kosong. Conto khas nambah kode AppServiceProvider, yaiku babagan mateni loading lazy ing Eloquent. Kanggo nindakake iki, sampeyan mung perlu nambah rong baris ing metode boot():

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Iki bakal uncalan pangecualian yen model sesambetan ora dimuat.

Gawe dhewe service provider selaras

Saliyane file predefinites, kita bisa gampang nggawe anyar Service Provider, related kanggo topik liyane saka sing sadurungedefirampung minangka auth/event/routes.

Conto sing cukup khas yaiku konfigurasi tampilan Blade. Kita bisa nggawe arahan Blade, banjur tambahake kode kasebut menyang metode kasebut boot() saka sembarang service provider, kalebu standar AppServiceProvider. Ayo saiki nggawe a ViewServiceProvider kapisah.

Kita bisa ngasilake kanthi printah iki:

php artisan make:provider ViewServiceProvider

Kang bakal generate kelas supaya predefibengi:

namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
 
class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
 
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

Kaya sing kita deleng, ana rong cara:

Metode register().

Register () cara ngidini kita definish pranala menyang wadhah layanan kita. Contone, ing kode ing ngisor iki:

public function register()
{
    $this->app->singleton(my_class, function($app){
        return new MyClass($app);
    });
}

$this->app minangka variabel global ing laravel sing bisa diakses kelas tunggal liwat app.

Singleton minangka fitur. Nalika ngetrapake fitur iki, kita ngandhani aplikasi manawa kelas apa wae sing dilewati minangka parameter ing app mung kudu duwe siji conto ing kabeh aplikasi. Iki tegese MyClass bakal ditanggulangi sapisan lan mung duwe siji conto, sing bisa diakses nggunakake variabel my_class.

Metode boot().

Cara boot () ngidini sampeyan ngakses kabeh layanan sing wis kadhaptar sadurunge nggunakake metode register. Sampeyan banjur bisa nyakup kabeh layanan ing aplikasi nggunakake metode iki.

Bali menyang conto sadurunge, ayo mbusak metode kasebut register() lan ing boot() tambahake kode arahan Blade:

use Illuminate\Support\Facades\Blade;
 
public function boot()
{
    Blade::directive('datetime', function ($expression) {
        return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
    });
}

Conto liyane saka ViewServiceProvider gati View Composers, iki cuplikane saka situs resmi Laravel :

use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
 
class ViewServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Using class based composers...
        View::composer('profile', ProfileComposer::class);
 
        // Using closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

Kanggo mbukak, panyedhiya anyar iki kudu ditambahake / didaftar menyang larik panyedhiya config/app.php:

return [
    // ... other configuration values
 
    'providers' => [
 
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
 
        // Add your provider here
        App\Providers\ViewServiceProvider::class,
    ],
];

Ercole Palmeri

Sampeyan bisa uga kasengsem ing:

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.
Tags: seo

Artikel anyar

Pasar Kunci Smart: laporan riset pasar diterbitake

Istilah Pasar Kunci Smart nuduhake industri lan ekosistem ing sekitar produksi, distribusi lan panggunaan…

27 Marzo 2024

Apa pola desain: kenapa digunakake, klasifikasi, pro lan kontra

Ing rekayasa piranti lunak, pola desain minangka solusi optimal kanggo masalah sing umume kedadeyan ing desain piranti lunak. Aku kaya…

26 Marzo 2024

Evolusi teknologi tandha industri

Tandha industri minangka istilah umum sing nyakup sawetara teknik sing digunakake kanggo nggawe tandha permanen ing permukaan…

25 Marzo 2024

Conto Excel Macro sing ditulis nganggo VBA

Conto makro Excel sing prasaja ing ngisor iki ditulis nggunakake VBA Estimasi wektu maca: 3 menit Conto…

25 Marzo 2024