makala

Watoa Huduma katika Laravel: wao ni nini na jinsi ya kutumia Watoa Huduma katika Laravel

Watoa huduma wa Laravel ndio mahali pa msingi ambapo maombi yanaanzishwa. Hiyo ni, huduma za msingi za Laravel na huduma za maombi, madarasa, na utegemezi wao huwekwa kwenye chombo cha huduma kupitia watoa huduma. 

Kwa maneno mengine, watoa huduma ni kama funeli ambapo tunamimina mafuta ya "daraja" kwenye tanki inayoitwa "chombo cha huduma" cha injini inayoitwa Laravel.

mfano

Tukifungua config/app.php tutaona safu yenye jina "mtoa huduma"

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

Hawa ni baadhi ya watoa huduma wanaotolewa pamoja na laravel, yaani huduma za msingi ambazo huwekwa kwenye kontena la huduma.

Wakati i service provider zinatumbuizwa?

Ikiwa tunaangalia nyaraka kwa ombi la mzunguko wa maisha , faili zifuatazo zinatekelezwa mwanzoni:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php na yake Middlewares
  • Service Providers: maudhui ya makala hii

nini service provider wamepakiwa? 

Wao ni wale definites katika safu 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,
 
    ],
 
];

Kama tunaweza kuona, kuna orodha ya service provider si hadharani kwenye folda /vendor, hatupaswi kuzigusa wala kuzirekebisha. Zile zinazotuvutia ziko hapa chini, nazo BroadcastServicerProvider imezimwa kwa chaguo-msingi, pengine kwa sababu haitumiki sana.

Watoa huduma hawa wote hukimbia kutoka juu hadi chini, wakirudia orodha mara mbili:

  • marudio ya kwanza ni kutafuta mbinu ya hiari register(), muhimu kwa (hatimaye) kutekeleza kitu kilichosanidiwa kabla ya mbinu boot().
  • iteration ya pili inatekeleza mbinu boot() wa watoa huduma wote. Tena, moja kwa moja, juu hadi chini, ya safu 'providers'.
  • Hatimaye, baada ya watoa huduma wote kusindika, Laravel inaendelea kwa kuchanganua njia (njia), kuendesha mtawala, kwa kutumia templates, nk.

Watoa Huduma Laravel kabladefiniti

I Service Providers iliyojumuishwa kwenye Laravel, ni wale wote waliopo kwenye folda app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Zote ni madarasa ya PHP, kila moja inahusiana na mada yake mwenyewe: App, Auth, Broadcasting, Events e Routes. Lakini wote wana jambo moja kwa pamoja: mbinu boot().

Ndani ya njia hiyo, tunaweza kuandika nambari yoyote inayohusiana na sehemu yoyote kati ya hizo: auth, events, route, na kadhalika. Kwa maneno mengine, Watoa Huduma ni madarasa tu ya kusajili utendaji fulani wa kimataifa.

Zimetenganishwa kama "watoa huduma" kwa sababu zinaendeshwa mapema sana katika kipindi cha matumizi, kwa hivyo kitu cha kimataifa kinafaa hapa kabla hati ya kutekeleza haijafika kwa Models au Controllers.

Utendaji mwingi uko kwenye RouteServiceProvider, hapa kuna nambari:

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

Hili ndilo darasa ambalo faili zimesanidiwa route, Pamoja na routes/web.phproutes/api.php imejumuishwa na chaguo-msingidefinita. Kumbuka kuwa kwa API pia kuna usanidi tofauti: kiambishi awali cha Mwisho /api na vyombo vya kati api kwa wote routes.

Tunaweza kuhariri service providers, ambazo haziko kwenye folda /vendor. Kubinafsisha faili hizi hufanywa wakati una njia nyingi na unataka kuzitenganisha katika faili maalum. Unaunda routes/auth.php na uweke njia hapo, kisha "unawezesha" faili hiyo kwa njia boot() di RouteServiceProvider, ongeza sentensi ya tatu:

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

AppServiceProvider ni tupu. Mfano wa kawaida wa kuongeza msimbo AppServiceProvider, inahusu kuzima upakiaji wa uvivu katika Eloquent . Ili kufanya hivyo, unahitaji tu ongeza mistari miwili katika mbinu boot():

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Hii itatupa ubaguzi ikiwa mtindo wa uhusiano haujapakiwa.

Tengeneza yako service provider customized

Mbali na faili za awalidefiNites, tunaweza kuunda mpya kwa urahisi Service Provider, kuhusiana na mada nyingine zaidi ya zile zilizotanguliadefikumaliza kama auth/event/routes.

Mfano wa kawaida ni usanidi wa kutazama Blade. Tunaweza kuunda mwongozo Blade, na kisha ongeza nambari hiyo kwenye njia boot() yoyote service provider, ikijumuisha chaguo-msingi AppServiceProvider. Hebu sasa tutengeneze a ViewServiceProvider kujitenga.

Tunaweza kuizalisha kwa amri hii:

php artisan make:provider ViewServiceProvider

Ambayo itatoa darasa mapemadefiusiku:

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

Kama tunavyoona ndani kuna njia mbili:

Njia ya rejista ().

Njia ya kujiandikisha () inaruhusu sisi kufanya hivyo definish viungo kwa chombo chetu cha huduma. Kwa mfano, katika nambari ifuatayo:

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

$this->programu ni tofauti ya kimataifa katika laravel ambayo darasa la singleton linaweza kufikia kupitia programu.

Singleton ni kipengele. Wakati wa kutumia kipengele hiki, tunafahamisha programu kwamba darasa lolote linalopitishwa kama kigezo katika programu linapaswa kuwa na tukio moja tu katika programu nzima. Hii inamaanisha kuwa MyClass itatatuliwa mara moja na itakuwa na mfano mmoja tu, ambao unaweza kufikiwa kwa kutumia utofauti wa my_class.

Njia ya boot ().

Njia ya boot() hukuruhusu kufikia huduma zote zilizosajiliwa hapo awali kwa kutumia njia ya usajili. Kisha unaweza kujumuisha huduma nzima katika programu yako kwa kutumia njia hii.

Kurudi kwa mfano uliopita, hebu tuondoe njia register() na ndani boot() ongeza nambari ya maagizo ya Blade:

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

Mfano mwingine wa ViewServiceProvider kujali View Composers, hiki hapa kipande kidogo kutoka kwa tovuti rasmi ya 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) {
            //
        });
    }
}

Ili kutekeleza, mtoaji huyu mpya lazima aongezwe/asajiliwe kwa safu ya watoa huduma 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

Unaweza pia kupendezwa na:

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Makala ya hivi karibuni

Faida za Kurasa za Kuchorea kwa Watoto - ulimwengu wa uchawi kwa kila kizazi

Kukuza ujuzi mzuri wa magari kupitia kupaka rangi huwatayarisha watoto kwa ujuzi changamano zaidi kama vile kuandika. Kupaka rangi...

2 Mei 2024

Wakati Ujao Upo Hapa: Jinsi Sekta ya Usafirishaji Inavyofanya Mapinduzi katika Uchumi wa Kimataifa

Sekta ya majini ni nguvu ya kweli ya kiuchumi duniani, ambayo imepitia kwenye soko la bilioni 150 ...

1 Mei 2024

Wachapishaji na OpenAI hutia saini mikataba ya kudhibiti mtiririko wa taarifa zinazochakatwa na Intelligence Artificial Intelligence

Jumatatu iliyopita, Financial Times ilitangaza makubaliano na OpenAI. FT inatoa leseni kwa uandishi wake wa habari wa kiwango cha kimataifa…

Aprili 30 2024

Malipo ya Mtandaoni: Hivi Ndivyo Huduma za Utiririshaji Hukufanya Ulipe Milele

Mamilioni ya watu hulipia huduma za utiririshaji, kulipa ada za usajili za kila mwezi. Ni maoni ya kawaida kwamba wewe…

Aprili 29 2024