Erthyglau

Darparwyr Gwasanaeth yn Laravel: beth ydyn nhw a sut i ddefnyddio Darparwyr Gwasanaeth yn Laravel

Darparwyr gwasanaeth Laravel yw'r man canolog lle cychwynnir y cais. Hynny yw, mae gwasanaethau craidd Laravel a gwasanaethau cymhwysiad, dosbarthiadau, a'u dibyniaethau yn cael eu gosod yn y cynhwysydd gwasanaeth trwy ddarparwyr. 

Mewn geiriau eraill, mae darparwyr gwasanaeth fel twndis lle rydyn ni'n arllwys tanwydd "dosbarth" i danc o'r enw "cynhwysydd gwasanaeth" injan o'r enw Laravel.

enghraifft

Os byddwn yn agor config/app.php fe welwn arae gyda'r enw "darparwr"

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

Dyma rai o’r darparwyr gwasanaeth a ddarperir ynghyd â larafel, h.y. gwasanaethau sylfaenol sy’n cael eu rhoi yn y cynhwysydd gwasanaeth.

Pryd fi service provider ydyn nhw'n cael eu perfformio?

Os edrychwn ar y ddogfennaeth cylch bywyd ar gais , gweithredir y ffeiliau canlynol ar y cychwyn:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php a'i Middlewares
  • Service Providers: cynnwys yr erthygl hon

Pa service provider ydyn nhw wedi'u llwytho? 

Dyma nhw definites yn yr arae 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,
 
    ],
 
];

Fel y gallwn weld, mae rhestr o service provider ddim yn gyhoeddus yn y ffolder /vendor, ni ddylem gyffwrdd â hwy na'u haddasu. Mae'r rhai sydd o ddiddordeb i ni isod, gyda BroadcastServicerProvider anabl yn ddiofyn, mae'n debyg oherwydd mai anaml y caiff ei ddefnyddio.

Mae'r holl ddarparwyr gwasanaeth hyn yn rhedeg o'r brig i'r gwaelod, gan ailadrodd y rhestr dwywaith:

  • Mae'r iteriad cyntaf yn chwilio am ddull dewisol register(), yn ddefnyddiol ar gyfer (yn y pen draw) gweithredu rhywbeth wedi'i ffurfweddu cyn y dull boot().
  • mae'r ail iteriad yn gweithredu'r dull boot() o'r holl ddarparwyr. Eto, fesul un, o'r top i'r gwaelod, o'r arae 'providers'.
  • Yn olaf, ar ôl i'r holl ddarparwyr gwasanaeth gael eu prosesu, mae Laravel yn symud ymlaen i ddosrannu'r llwybr (llwybr), rhedeg y rheolydd, defnyddio templedi, ac ati.

Darparwyr Gwasanaeth Laravel cyndefinac ychwaith

I Service Providers wedi'u cynnwys yn Laravel, a yw pawb sy'n bresennol yn y ffolder app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Maent i gyd yn ddosbarthiadau PHP, pob un yn ymwneud â'i bwnc ei hun: App, Auth, Broadcasting, Events e Routes. Ond mae gan bob un ohonynt un peth yn gyffredin: dull boot().

O fewn y dull hwnnw, gallwn ysgrifennu unrhyw god sy'n gysylltiedig ag unrhyw un o'r adrannau hynny: auth, events, route, etc. Mewn geiriau eraill, dim ond dosbarthiadau i gofrestru rhai swyddogaethau byd-eang yw Darparwyr Gwasanaeth.

Maent ar wahân fel "darparwyr" oherwydd eu bod yn rhedeg yn gynnar iawn yng nghylch bywyd y cais, felly mae rhywbeth byd-eang yn gyfleus yma cyn i'r sgript weithredu gyrraedd Modelau neu Reolwyr.

Mae'r rhan fwyaf o'r swyddogaethau yn y RouteServiceProvider, dyma'r cod:

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

Dyma'r dosbarth lle mae'r ffeiliau wedi'u ffurfweddu route, Gyda routes/web.phproutes/api.php cynnwys yn ddiofyndefinita. Sylwch fod yna wahanol gyfluniadau ar gyfer yr API hefyd: rhagddodiad Endpoint /api a llestri canol api i bawb routes.

Gallwn olygu'r service providers, nad ydynt yn y ffolder /vendor. Mae addasu'r ffeiliau hyn yn cael ei wneud pan fydd gennych lawer o lwybrau ac eisiau eu gwahanu'n ffeiliau penodol. Rydych chi'n creu routes/auth.php a rhowch y llwybrau yno, yna rydych chi'n "galluogi" y ffeil honno yn y dull boot() di RouteServiceProvider, ychwanegwch y drydedd frawddeg:

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

AppServiceProvider mae'n wag. Enghraifft nodweddiadol o ychwanegu cod AppServiceProvider, yn ymwneud ag analluogi llwytho diog yn Eloquent . I wneud hyn, dim ond angen i chi ychwanegu dwy linell yn y dull boot():

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Bydd hyn yn taflu eithriad os na chaiff model perthynas ei lwytho.

Creu eich un eich hun service provider customized

Yn ogystal â'r ffeiliau ymlaen llawdefinites, gallwn yn hawdd greu un newydd Service Provider, perthynol i bynciau eraill heblaw y rhai cyndefigorffen fel auth/event/routes.

Enghraifft weddol nodweddiadol yw'r ffurfweddiad golygfa Blade. Gallwn greu cyfarwyddeb Blade, ac yna ychwanegwch y cod hwnnw i'r dull boot() o unrhyw service provider, gan gynnwys y rhagosodiad AppServiceProvider. Gadewch i ni nawr greu a ViewServiceProvider gwahanu.

Gallwn ei gynhyrchu gyda'r gorchymyn hwn:

php artisan make:provider ViewServiceProvider

A fydd yn cynhyrchu y dosbarth mor cyndefineis:

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

Fel y gallwn weld y tu mewn, mae dau ddull:

Dull y gofrestr().

Mae'r dull cofrestr() yn caniatáu i ni wneud hynny deficysylltiadau nish i'n cynhwysydd gwasanaeth. Er enghraifft, yn y cod canlynol:

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

Mae $this->app yn newidyn byd-eang mewn laravel y gall dosbarth sengl ei gyrchu trwy'r ap.

Mae Singleton yn nodwedd. Wrth gymhwyso'r nodwedd hon, rydym yn hysbysu'r cais mai dim ond un achos ddylai fod gan ba bynnag ddosbarth sy'n cael ei basio fel paramedr yn yr ap yn y cais cyfan. Mae hyn yn golygu y bydd MyClass yn cael ei ddatrys unwaith a dim ond un achos fydd ganddo, y gellir ei gyrchu gan ddefnyddio'r newidyn my_class.

Y dull cychwyn ().

Mae'r dull cychwyn () yn eich galluogi i gael mynediad at yr holl wasanaethau a gofrestrwyd yn flaenorol gan ddefnyddio'r dull cofrestr. Yna gallwch chi gynnwys y gwasanaeth cyfan yn eich cais gan ddefnyddio'r dull hwn.

Gan fynd yn ôl at yr enghraifft flaenorol, gadewch i ni gael gwared ar y dull register() ac o fewn boot() ychwanegu cod cyfarwyddeb Blade:

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

Enghraifft arall o ViewServiceProvider ystyried View Composers, dyma'r pyt o wefan swyddogol 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) {
            //
        });
    }
}

I redeg, rhaid ychwanegu/cofrestru'r darparwr newydd hwn i'r arae darparwyr mewnol 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

Efallai y bydd gennych ddiddordeb hefyd mewn:

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.

Erthyglau Diweddar

Mae cyhoeddwyr ac OpenAI yn llofnodi cytundebau i reoleiddio'r llif gwybodaeth a brosesir gan Ddeallusrwydd Artiffisial

Ddydd Llun diwethaf, cyhoeddodd y Financial Times gytundeb ag OpenAI. Mae FT yn trwyddedu ei newyddiaduraeth o safon fyd-eang…

30 2024 Ebrill

Taliadau Ar-lein: Dyma Sut Mae Gwasanaethau Ffrydio yn Gwneud ichi Dalu Am Byth

Mae miliynau o bobl yn talu am wasanaethau ffrydio, gan dalu ffioedd tanysgrifio misol. Mae’n farn gyffredin eich bod chi…

29 2024 Ebrill

Mae Veeam yn cynnwys y gefnogaeth fwyaf cynhwysfawr ar gyfer ransomware, o amddiffyniad i ymateb ac adferiad

Bydd Coveware gan Veeam yn parhau i ddarparu gwasanaethau ymateb i ddigwyddiadau cribddeiliaeth seiber. Bydd Coveware yn cynnig galluoedd fforensig ac adfer…

23 2024 Ebrill

Chwyldro Gwyrdd a Digidol: Sut Mae Cynnal a Chadw Rhagfynegol yn Trawsnewid y Diwydiant Olew a Nwy

Mae gwaith cynnal a chadw rhagfynegol yn chwyldroi'r sector olew a nwy, gyda dull arloesol a rhagweithiol o reoli planhigion.…

22 2024 Ebrill