ארטיקלען

סערוויס פּראַוויידערז אין לאַראַוועל: וואָס זיי זענען און ווי צו נוצן סערוויס פּראַוויידערז אין לאַראַוועל

לאַראַוועל סערוויס פּראַוויידערז זענען די הויפט אָרט ווו די אַפּלאַקיישאַן איז סטאַרטעד. דאָס איז, האַרץ לאַראַוועל באַדינונגס און אַפּלאַקיישאַן באַדינונגס, קלאסן און זייער דיפּענדאַנסיז זענען געשטעלט אין די סערוויס קאַנטיינער דורך פּראַוויידערז. 

אין אנדערע ווערטער, סערוויס פּראַוויידערז זענען ווי אַ לייקע דורך וואָס מיר גיסן "קלאַס" ברענוואַרג אין אַ טאַנק גערופן די "דינסט קאַנטיינער" פון אַ מאָטאָר גערופן לאַראַוועל.

בייַשפּיל

אויב מיר עפֿענען config/app.php, מיר וועלן זען אַ מענגע מיט די נאָמען "שפּייַזער"

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

דאָס זענען עטלעכע פון ​​​​די סערוויס פּראַוויידערז צוגעשטעלט צוזאַמען מיט לאַראַוועל, ד"ה יקערדיק באַדינונגס וואָס זענען געשטעלט אין די סערוויס קאַנטיינער.

ווען איך service provider זענען זיי געטאן?

אויב מיר קוקן אין די דאַקיומענטיישאַן אויף בעטן לייפסייקאַל , די פאלגענדע טעקעס זענען עקסאַקיוטאַד אין די אָנהייב:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php און זיין Middlewares
  • Service Providers: אינהאַלט פון דעם אַרטיקל

וואָס service provider זענען זיי לאָודיד? 

זיי זענען די defiניץ אין די מענגע 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,
 
    ],
 
];

ווי מיר קענען זען, עס איז אַ רשימה פון service provider ניט עפנטלעך אין דער טעקע /vendor, מיר זאָל ניט אָנרירן אדער מאָדיפיצירן זיי. די וואָס אינטערעסירן אונדז זענען אונטן, מיט BroadcastServicerProvider פאַרקריפּלט דורך פעליקייַט, מיסטאָמע ווייַל עס איז ראַרעלי געניצט.

אַלע די סערוויס פּראַוויידערז לויפן פון שפּיץ צו דנאָ, ריפּיטינג די רשימה צוויי מאָל:

  • דער ערשטער יטעראַטיאָן איז קוקן פֿאַר אַ אַפּשאַנאַל אופֿן register(), נוציק פֿאַר (יווענטשאַוואַלי) עקסאַקיוטינג עפּעס קאַנפיגיערד איידער דעם אופֿן boot().
  • די רגע יטעראַטיאָן עקסאַקיוץ דעם אופֿן boot() פון אַלע פּראַוויידערז. ווידער, איינער דורך איינער, שפּיץ צו דנאָ, פון די מענגע 'providers'.
  • צום סוף, נאָך אַלע די סערוויס פּראַוויידערז האָבן שוין פּראַסעסט, Laravel באוועגט צו פּאַרסינג דעם דרך (וועג), לויפן די קאָנטראָללער, ניצן טעמפּלאַטעס, אאז"ו ו.

סערוויס פּראַוויידערז לאַראַוועל פּרעdefiאויך נישט

I Service Providers אַרייַנגערעכנט אין Laravel, זענען אַלע די פאָרשטעלן אין דער טעקע app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

זיי זענען אַלע PHP קלאסן, יעדער שייַכות צו זיין אייגענע טעמע: App, Auth, Broadcasting, Events e Routes. אבער זיי אַלע האָבן איין זאַך אין פּראָסט: אופֿן boot().

אין דעם אופֿן, מיר קענען שרייַבן קיין קאָד שייך צו קיין פון די סעקשאַנז: auth, events, routeאאז"ו ו אין אנדערע ווערטער, סערוויס פּראַוויידערז זענען בלויז קלאסן צו פאַרשרייַבן עטלעכע גלאבאלע פאַנגקשאַנאַליטי.

זיי זענען באַזונדער ווי "פּראַוויידערז" ווייַל זיי לויפן זייער פרי אין די אַפּלאַקיישאַן ליפעסיקלע, אַזוי עפּעס גלאבאלע איז באַקוועם דאָ איידער די עקסאַקיוטינג שריפט קומט צו מאָדעלס אָדער קאָנטראָללער.

רובֿ פון די פאַנגקשאַנאַליטי איז אין די RouteServiceProvider, דאָ איז די קאָד:

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

דאָס איז דער קלאַס ווו די טעקעס זענען קאַנפיגיערד route, מיט routes/web.phproutes/api.php אַרייַנגערעכנט דורך פעליקייַטdefiניטאַ. באַמערקונג אַז פֿאַר די אַפּי עס זענען אויך פאַרשידענע קאַנפיגיעריישאַנז: ענדפּוינט פּרעפיקס /api און מיטלוואַרע api פֿאַר אַלע routes.

מיר קענען רעדאַגירן די service providers, וואָס זענען נישט אין דער טעקע /vendor. קאַסטאַמייזינג די טעקעס איז געטאן ווען איר האָבן פילע פּאַטס און ווילן צו צעטיילן זיי אין ספּעציפיש טעקעס. איר מאַכן routes/auth.php און שטעלן די פּאַטס דאָרט, און איר "געבן" די טעקע אין דעם אופֿן boot() di RouteServiceProvider, לייג נאר צו דעם דריטן זאץ:

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

AppServiceProvider עס איז ליידיק. א טיפּיש בייַשפּיל פון אַדינג קאָד AppServiceProvider, איז וועגן דיסייבאַלינג פויל לאָודינג אין עלאַקוואַנט . צו טאָן דאָס, איר נאָר דאַרפֿן לייג צוויי שורות אין דער שיטה boot():

כידעש נוזלעטער
דו זאלסט נישט פאַרפירן די מערסט וויכטיק נייַעס וועגן כידעש. צייכן אַרויף צו באַקומען זיי דורך E- בריוו.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

דאָס וועט וואַרפן אַ ויסנעם אויב אַ שייכות מאָדעל איז נישט לאָודיד.

שאַפֿן דיין אייגענע service provider קאַסטאַמייזד

אין אַדישאַן צו די פאַר טעקעסdefiמיר קענען לייכט שאַפֿן אַ נייַע Service Provider, שייַכות צו אנדערע טעמעס ווי די פּריdefiפאַרטיק ווי auth/event/routes.

א גאַנץ טיפּיש בייַשפּיל איז די מיינונג קאַנפיגיעריישאַן Blade. מיר קענען מאַכן אַ דירעקטיוו Blade, און דעריבער לייגן דעם קאָד אין דעם אופֿן boot() פון קיין service provider, אַרייַנגערעכנט די פעליקייַט AppServiceProvider. לאָמיר איצט שאַפֿן אַ ViewServiceProvider באַזונדער.

מיר קענען דזשענערייט עס מיט דעם באַפֿעל:

php artisan make:provider ViewServiceProvider

וואָס וועט דזשענערייט די קלאַס אַזוי פאַרdefiניט:

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

ווי מיר קענען זען ין עס זענען צוויי מעטהאָדס:

די רעגיסטרירן () אופֿן

די רעגיסטרירן () אופֿן אַלאַוז אונדז צו defiניט לינקס צו אונדזער סערוויס קאַנטיינער. פֿאַר בייַשפּיל, אין די פאלגענדע קאָד:

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

$this-> אַפּ איז אַ גלאבאלע בייַטעוודיק אין לאַראַוועל אַז אַ סינגלעטאָן קלאַס קענען אַקסעס דורך די אַפּ.

סינגלעטאָן איז אַ שטריך. ווען אַפּלייינג דעם שטריך, מיר ינפאָרמירן די אַפּלאַקיישאַן אַז וועלכער קלאַס איז דורכגעגאנגען ווי אַ פּאַראַמעטער אין די אַפּ זאָל האָבן בלויז איין בייַשפּיל אין די גאנצע אַפּלאַקיישאַן. דעם מיטל אַז MyClass וועט זיין ריזאַלווד אַמאָל און וועט האָבן בלויז איין בייַשפּיל, וואָס קענען זיין אַקסעסט מיט די my_class בייַטעוודיק.

דער שטיוול () אופֿן

די שטיוול () אופֿן אַלאַוז איר צו אַקסעס אַלע סערוויסעס ביז אַהער רעגיסטרירט מיט די רעגיסטרירן אופֿן. דערנאָך איר קענען אַרייַננעמען די גאנצע דינסט אין דיין אַפּלאַקיישאַן מיט דעם אופֿן.

גיין צוריק צו די פריערדיקע בייַשפּיל, לאָזן ס אַראָפּנעמען דעם אופֿן register() און ין boot() לייג די Blade דירעקטיוו קאָד:

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

אן אנדער בייַשפּיל פון ViewServiceProvider באַטראַכטן View Composers, דאָ איז די סניפּאַט פֿון דער באַאַמטער 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) {
            //
        });
    }
}

צו לויפן, דעם נייַע שפּייַזער מוזן זיין מוסיף / רעגיסטרירט צו די אין שפּייַזער מענגע 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

איר קען אויך זיין אינטערעסירט אין:

כידעש נוזלעטער
דו זאלסט נישט פאַרפירן די מערסט וויכטיק נייַעס וועגן כידעש. צייכן אַרויף צו באַקומען זיי דורך E- בריוו.

לעצטע ארטיקלען

Veeam פֿעיִקייטן די מערסט פולשטענדיק שטיצן פֿאַר ראַנסאָמוואַרע, פֿון שוץ צו ענטפער און אָפּזוך

Coveware דורך Veeam וועט פאָרזעצן צו צושטעלן ענטפער באַדינונגס פֿאַר סייבער יקסטאָרשאַן אינצידענט. קאָוועוואַרע וועט פאָרשלאָגן פאָרענסיקס און רימעדייישאַן קייפּאַבילאַטיז ...

קסנומקס אפריל קסנומקס

גרין און דיגיטאַל רעוואלוציע: ווי פּרידיקטיוו וישאַלט איז טראַנספאָרמינג די אָיל און גאַז אינדוסטריע

פּרידיקטיוו וישאַלט איז רעוואַלושאַנייזינג די ייל & גאַז סעקטאָר, מיט אַן ינאַווייטיוו און פּראָואַקטיוו צוגאַנג צו פאַבריק פאַרוואַלטונג.…

קסנומקס אפריל קסנומקס

וק אַנטיטראַסט רעגולאַטאָר רייזאַז ביגטעטש שרעק איבער GenAI

די UK CMA האט ארויס אַ ווארענונג וועגן ביג טעק ס נאַטור אין די קינסטלעך סייכל מאַרק. דאָרט…

קסנומקס אפריל קסנומקס

Casa Green: ענערגיע רעוואָלוציע פֿאַר אַ סאַסטיינאַבאַל צוקונפֿט אין איטאליע

די "קאַסע גרין" דעקרעט, פארמולירט דורך די אייראפעישע יוניאַן צו פאַרבעסערן די ענערגיע עפעקטיווקייַט פון בנינים, האט פארענדיקט זיין לעגיסלאַטיווע פּראָצעס מיט ...

קסנומקס אפריל קסנומקס

לייענען כידעש אין דיין שפּראַך

כידעש נוזלעטער
דו זאלסט נישט פאַרפירן די מערסט וויכטיק נייַעס וועגן כידעש. צייכן אַרויף צו באַקומען זיי דורך E- בריוו.

גיי אונדז