Artikuj

Ofruesit e shërbimeve në Laravel: çfarë janë ata dhe si të përdorin Ofruesit e Shërbimeve në Laravel

Ofruesit e shërbimeve Laravel janë vendi qendror ku fillon aplikimi. Kjo do të thotë, shërbimet kryesore Laravel dhe shërbimet e aplikacioneve, klasat dhe varësitë e tyre vendosen në kontejnerin e shërbimit nëpërmjet ofruesve. 

Me fjalë të tjera, ofruesit e shërbimeve janë si një gyp përmes të cilit ne derdhim karburantin "klas" në një rezervuar të quajtur "kontejner shërbimi" i një motori të quajtur Laravel.

shembull

Nëse hapim config/app.php, do të shohim një grup me emrin "ofruesi"

'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,
        .
        .
        .
],

Këta janë disa nga ofruesit e shërbimeve të ofruara së bashku me laravel, pra shërbimet bazë të cilat vendosen në kontejnerin e shërbimit.

Kur une service provider a kryhen?

Nëse shikojmë dokumentacionin cikli jetësor sipas kërkesës , skedarët e mëposhtëm ekzekutohen në fillim:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php dhe të tijat Middlewares
  • Service Providers: përmbajtja e këtij artikulli

quali service provider janë të ngarkuara? 

Ata janë ata definites në grup 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,
 
    ],
 
];

Siç mund ta shohim, ekziston një listë e service provider jo publike në dosje /vendor, nuk duhet as t'i prekim dhe as t'i modifikojmë. Ato që na interesojnë janë më poshtë, me BroadcastServicerProvider i çaktivizuar si parazgjedhje, ndoshta sepse përdoret rrallë.

Të gjithë këta ofrues shërbimesh shkojnë nga lart poshtë, duke përsëritur listën dy herë:

  • Përsëritja e parë kërkon një metodë opsionale register(), i dobishëm për (përfundimisht) ekzekutimin e diçkaje të konfiguruar përpara metodës boot().
  • përsëritja e dytë ekzekuton metodën boot() e të gjithë ofruesve. Përsëri, një nga një, nga lart poshtë, të grupit 'providers'.
  • Më në fund, pasi të gjithë ofruesit e shërbimeve të jenë përpunuar, Laravel kalon në analizimin e shtegut (rrugës), ekzekutimin e kontrolluesit, përdorimin e shablloneve, etj.

Ofruesit e shërbimeve Laravel paradefias

I Service Providers të përfshira në Laravel, janë të gjithë ata që janë të pranishëm në dosje app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Ato janë të gjitha klasa PHP, secila e lidhur me temën e vet: App, Auth, Broadcasting, Events e Routes. Por të gjithë kanë një gjë të përbashkët: metodën boot().

Brenda kësaj metode, ne mund të shkruajmë çdo kod që lidhet me cilindo nga ato seksione: auth, events, route, etj. Me fjalë të tjera, Ofruesit e Shërbimeve janë thjesht klasa për të regjistruar disa funksione globale.

Ato janë të ndara si "ofruesit" sepse funksionojnë shumë herët në ciklin e jetës së aplikacionit, kështu që diçka globale është e përshtatshme këtu përpara se skripti ekzekutues të kalojë te Modelet ose Kontrollorët.

Shumica e funksionalitetit është në RouteServiceProvider, këtu është kodi:

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());
        });
    }
}

Kjo është klasa ku janë konfiguruar skedarët route, Me routes/web.phproutes/api.php përfshirë si parazgjedhjedefinita. Vini re se për API ka edhe konfigurime të ndryshme: prefiksi i pikës fundore /api dhe pajisje të mesme api per te gjithe routes.

Ne mund të modifikojmë service providers, të cilat nuk janë në dosje /vendor. Përshtatja e këtyre skedarëve bëhet kur keni shumë shtigje dhe dëshironi t'i ndani në skedarë të veçantë. Ju krijoni routes/auth.php dhe vendosni shtigjet atje, pastaj "aktivizoni" atë skedar në metodë boot() di RouteServiceProvider, thjesht shtoni fjalinë e tretë:

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

AppServiceProvider është e shprazur. Një shembull tipik i shtimit të kodit AppServiceProvider, ka të bëjë me çaktivizimin e ngarkimit dembel në Eloquent. Për ta bërë këtë, ju vetëm duhet shtoni dy rreshta në metodën boot():

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Kjo do të bëjë një përjashtim nëse një model marrëdhëniesh nuk ngarkohet.

Krijo tenden service provider përshtatur

Përveç skedarëve paraprakdefinites, ne mund të krijojmë lehtësisht një të re Service Provider, lidhur me tema të tjera nga ato paradefipërfunduar si auth/event/routes.

Një shembull mjaft tipik është konfigurimi i pamjes Blade. Ne mund të krijojmë një direktivë Blade, dhe më pas shtoni atë kod në metodë boot() të ndonjë service provider, duke përfshirë parazgjedhjen AppServiceProvider. Le të krijojmë tani një ViewServiceProvider veçuar.

Mund ta gjenerojmë me këtë komandë:

php artisan make:provider ViewServiceProvider

E cila do të gjenerojë klasën aq paradefinata:

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()
    {
        //
    }
}

Siç mund ta shohim brenda, ekzistojnë dy mënyra:

Metoda e regjistrit().

Metoda register() na lejon defilidhjet nish në kontejnerin tonë të shërbimit. Për shembull, në kodin e mëposhtëm:

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

$this->app është një variabël globale në laravel që një klasë singleton mund t'i qaset përmes aplikacionit.

Singleton është një veçori. Kur aplikoni këtë veçori, ne po informojmë aplikacionin se cilado klasë që kalohet si parametër në aplikacion duhet të ketë vetëm një shembull në të gjithë aplikacionin. Kjo do të thotë që MyClass do të zgjidhet një herë dhe do të ketë vetëm një shembull, i cili mund të aksesohet duke përdorur variablin my_class.

Metoda boot().

Metoda boot() ju lejon të aksesoni të gjitha shërbimet e regjistruara më parë duke përdorur metodën e regjistrimit. Më pas mund të përfshini të gjithë shërbimin në aplikacionin tuaj duke përdorur këtë metodë.

Duke u kthyer te shembulli i mëparshëm, le të heqim metodën register() dhe brenda boot() shtoni kodin e direktivës Blade:

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

Një shembull tjetër i ViewServiceProvider ka të bëjë View Composers, këtu është fragmenti nga faqja zyrtare e 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) {
            //
        });
    }
}

Për të ekzekutuar, ky ofrues i ri duhet të shtohet/regjistrohet në grupin e ofruesit në 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

Ju gjithashtu mund të jeni të interesuar në:

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.

Artikujt e fundit

Veeam përmban mbështetjen më të plotë për ransomware, nga mbrojtja te përgjigja dhe rikuperimi

Coveware nga Veeam do të vazhdojë të ofrojë shërbime të reagimit ndaj incidenteve të zhvatjes kibernetike. Coveware do të ofrojë aftësi mjeko-ligjore dhe riparimi…

23 Prill 2024

Revolucioni i gjelbër dhe dixhital: Si mirëmbajtja parashikuese po transformon industrinë e naftës dhe gazit

Mirëmbajtja parashikuese po revolucionon sektorin e naftës dhe gazit, me një qasje inovative dhe proaktive për menaxhimin e impiantit.…

22 Prill 2024

Rregullatori antitrust në Mbretërinë e Bashkuar ngre alarmin e BigTech mbi GenAI

CMA e Mbretërisë së Bashkuar ka lëshuar një paralajmërim për sjelljen e Big Tech në tregun e inteligjencës artificiale. Aty…

18 Prill 2024

Casa Green: revolucion energjetik për një të ardhme të qëndrueshme në Itali

Dekreti "Case Green", i formuluar nga Bashkimi Evropian për të rritur efiçencën energjetike të ndërtesave, ka përfunduar procesin e tij legjislativ me…

18 Prill 2024