Ìwé

Awọn olupese iṣẹ ni Laravel: kini wọn jẹ ati bii o ṣe le lo Awọn olupese iṣẹ ni Laravel

Awọn olupese iṣẹ Laravel jẹ aaye aarin nibiti ohun elo ti bẹrẹ. Iyẹn ni, awọn iṣẹ Laravel mojuto ati awọn iṣẹ ohun elo, awọn kilasi, ati awọn igbẹkẹle wọn ni a gbe sinu apoti iṣẹ nipasẹ awọn olupese. 

Ni awọn ọrọ miiran, awọn olupese iṣẹ dabi eefun nipasẹ eyiti a da epo “kilasi” sinu ojò ti a pe ni “epo iṣẹ” ti ẹrọ ti a pe ni Laravel.

apẹẹrẹ

Ti a ba ṣii config/app.php a yoo ri orun pẹlu orukọ "olupese"

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

Iwọnyi jẹ diẹ ninu awọn olupese iṣẹ ti a pese papọ pẹlu laravel, ie awọn iṣẹ ipilẹ eyiti a gbe sinu eiyan iṣẹ.

Nigbati mo service provider ṣe wọn ṣe?

Ti a ba wo awọn iwe lori ìbéèrè lifecycle , awọn faili wọnyi ti wa ni ṣiṣe ni ibẹrẹ:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php ati tirẹ Middlewares
  • Service Providers: akoonu ti yi article

Ewo ni service provider ti wa ni ti kojọpọ? 

Awon yen ni definited ni orun 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,
 
    ],
 
];

Bi a ti le ri, nibẹ ni akojọ kan ti service provider kii ṣe gbangba ni folda /vendor, a ko yẹ ki o fi ọwọ kan tabi ṣe atunṣe wọn. Awon ti o anfani wa ni isalẹ, pẹlu BroadcastServicerProvider alaabo nipa aiyipada, jasi nitori ti o ti wa ni ṣọwọn lo.

Gbogbo awọn olupese iṣẹ wọnyi nṣiṣẹ lati oke de isalẹ, tun ṣe atokọ naa lemeji:

  • Aṣetunṣe akọkọ n wa ọna iyan register(), wulo fun (bakẹhin) ṣiṣe nkan ti o tunto ṣaaju ọna naa boot().
  • keji aṣetunṣe ṣiṣẹ ọna boot() ti gbogbo awọn olupese. Lẹẹkansi, ọkan nipasẹ ọkan, oke si isalẹ, ti orun 'providers'.
  • Nikẹhin, lẹhin ti gbogbo awọn olupese iṣẹ ti ni ilọsiwaju, Laravel gbe lọ si sisọ ọna (ọna), ṣiṣe iṣakoso, lilo awọn awoṣe, ati bẹbẹ lọ.

Awọn olupese iṣẹ Laravel ṣaajudefinite

I Service Providers to wa ni Laravel, ti wa ni gbogbo awọn ti o wa ninu folda app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Gbogbo wọn jẹ awọn kilasi PHP, ọkọọkan ni ibatan si koko tirẹ: App, Auth, Broadcasting, Events e Routes. Ṣugbọn gbogbo wọn ni ohun kan ni wọpọ: ọna boot().

Ninu ọna yẹn, a le kọ koodu eyikeyi ti o ni ibatan si eyikeyi awọn apakan wọnyẹn: auth, events, route, ati be be lo. Ni awọn ọrọ miiran, Awọn olupese iṣẹ jẹ awọn kilasi lati forukọsilẹ diẹ ninu iṣẹ ṣiṣe agbaye.

Wọn jẹ lọtọ bi “olupese” nitori pe wọn ṣiṣẹ ni kutukutu igbesi aye ohun elo, nitorinaa ohunkan agbaye rọrun nibi ṣaaju ki iwe afọwọṣe ti n ṣiṣẹ si Awọn awoṣe tabi Awọn oludari.

Pupọ julọ iṣẹ ṣiṣe wa ni Olupese RouteService, eyi ni koodu naa:

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

Eyi ni kilasi nibiti a ti tunto awọn faili route, pẹlu routes/web.phproutes/api.php to wa nipa aiyipadadefinita. Ṣe akiyesi pe fun API awọn atunto oriṣiriṣi tun wa: Apejuwe ipari ipari /api ati middleware api fun gbogbo routes.

A le ṣatunkọ awọn service providers, eyi ti ko si ninu awọn folda /vendor. Isọdi awọn faili wọnyi ni a ṣe nigbati o ni ọpọlọpọ awọn ọna ati fẹ lati ya wọn sọtọ si awọn faili kan pato. O ṣẹda routes/auth.php ki o si fi awọn ọna sibẹ, lẹhinna o "ṣiṣẹ" faili naa ni ọna naa boot() di RouteServiceProvider, kan fi gbolohun kẹta kun:

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

AppServiceProvider ofo ni. A aṣoju apẹẹrẹ ti fifi koodu AppServiceProvider, jẹ nipa pipaṣẹ ikojọpọ ọlẹ ni Eloquent. Lati ṣe eyi, o kan nilo fi meji ila ni ọna boot():

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Eleyi yoo jabọ ohun sile ti o ba ti a ibasepo awoṣe ti ko ba kojọpọ.

Ṣẹda ti ara rẹ service provider adani

Ni afikun si awọn ṣaajudefinited tẹlẹ eyi, a le awọn iṣọrọ ṣẹda titun kan Service Provider, ti o jọmọ awọn koko-ọrọ miiran ju awọn ti iṣaaju lọdefikedere bi auth/event/routes.

A iṣẹtọ aṣoju apẹẹrẹ ni wiwo iṣeto ni Blade. A le ṣẹda itọsọna kan Blade, ati lẹhinna ṣafikun koodu yẹn sinu ọna naa boot() ti eyikeyi service provider, pẹlu aiyipada AppServiceProvider. Jẹ ki a ṣẹda bayi ViewServiceProvider lọtọ.

A le ṣe ipilẹṣẹ pẹlu aṣẹ yii:

php artisan make:provider ViewServiceProvider

Eyi ti yoo ṣe ipilẹṣẹ kilasi ṣaajudefinito:

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

Bi a ti le rii ni inu awọn ọna meji wa:

Ọna iforukọsilẹ ().

Ọna iforukọsilẹ () gba wa laaye lati definish awọn ọna asopọ si eiyan iṣẹ wa. Fun apẹẹrẹ, ninu koodu atẹle:

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

$this-> app jẹ oniyipada agbaye ni laravel ti kilasi singleton le wọle nipasẹ ohun elo naa.

Singleton jẹ ẹya kan. Nigba lilo ẹya yii, a n sọfun ohun elo naa pe eyikeyi kilasi ti o kọja bi paramita ninu app yẹ ki o ni apẹẹrẹ kan nikan ni gbogbo ohun elo naa. Eyi tumọ si pe MyClass yoo jẹ ipinnu ni ẹẹkan ati pe yoo ni apẹẹrẹ kan ṣoṣo, eyiti o le wọle si nipa lilo oniyipada my_class.

Ọna bata ().

Ọna bata () gba ọ laaye lati wọle si gbogbo awọn iṣẹ ti a forukọsilẹ tẹlẹ nipa lilo ọna iforukọsilẹ. Lẹhinna o le ṣafikun gbogbo iṣẹ naa sinu ohun elo rẹ ni lilo ọna yii.

Nlọ pada si apẹẹrẹ ti tẹlẹ, jẹ ki a yọ ọna naa kuro register() ati laarin boot() ṣafikun koodu itọsọna Blade:

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

Miiran apẹẹrẹ ti ViewServiceProvider iyi View Composers, eyi ni snippet lati aaye Laravel osise :

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

Lati ṣiṣẹ, olupese tuntun gbọdọ wa ni afikun/forukọsilẹ si akojọpọ olupese 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

O tun le nifẹ ninu:

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn iwe ti o ṣẹṣẹ

Awọn olutẹwe ati OpenAI fowo si awọn adehun lati ṣe ilana ṣiṣan ti alaye ti a ṣe ilana nipasẹ Imọran Artificial

Ni ọjọ Aarọ to kọja, Awọn akoko Iṣowo kede adehun kan pẹlu OpenAI. FT ṣe iwe-aṣẹ iwe-akọọlẹ agbaye rẹ…

30 Kẹrin 2024

Awọn sisanwo ori ayelujara: Eyi ni Bii Awọn iṣẹ ṣiṣanwọle jẹ ki o sanwo lailai

Awọn miliọnu eniyan sanwo fun awọn iṣẹ ṣiṣanwọle, san awọn idiyele ṣiṣe alabapin oṣooṣu. O jẹ ero ti o wọpọ pe o…

29 Kẹrin 2024

Veeam ṣe ẹya atilẹyin okeerẹ julọ fun ransomware, lati aabo si esi ati imularada

Coveware nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…

23 Kẹrin 2024

Alawọ ewe ati Iyika oni-nọmba: Bawo ni Itọju Asọtẹlẹ ti n Yipada Ile-iṣẹ Epo & Gaasi

Itọju isọtẹlẹ jẹ iyipada ti eka epo & gaasi, pẹlu imotuntun ati ọna imudani si iṣakoso ọgbin.…

22 Kẹrin 2024