Articles

Solaraichean Seirbheis ann an Laravel: dè a th’ annta agus mar a chleachdas tu Solaraichean Seirbheis ann an Laravel

Is e solaraichean seirbheis Laravel am prìomh àite far a bheil an tagradh air a chuir air bhog. Is e sin, tha prìomh sheirbheisean laravel agus seirbheisean tagraidh, clasaichean agus an eisimeileachd air am putadh a-steach don t-seirbheis seirbheis tro sholaraichean. 

Ann am faclan eile, tha solaraichean seirbheis coltach ri funail tro bheil sinn a’ dòrtadh connadh “clas” a-steach do tanca ris an canar “soitheach seirbheis” einnsean ris an canar Laravel.

Ùine leughaidh tuairmseach: 5 minuti

mar eisimpleir

Ma dh'fhosglas sinn config/app.php chì sinn sreath leis an ainm "solaraiche"

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

Is iad seo cuid de na solaraichean seirbheis a tha air an toirt seachad còmhla ri laravel, i.e. seirbheisean bunaiteach a tha air an cur anns a’ ghobhar seirbheis.

Nuair a i service provider a bheil iad air an coileanadh?

Ma bheir sinn sùil air na sgrìobhainnean cuairt-beatha air iarrtas , tha na faidhlichean a leanas air an cur an gnìomh aig an toiseach:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php agus a chuid Middlewares
  • Service Providers: susbaint an artaigil seo

service provider a bheil iad air an luchdachadh? 

Is iadsan an fheadhainn sin definites anns an t-sreath 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,
 
    ],
 
];

Mar a chì sinn, tha liosta de service provider nach eil poblach sa phasgan /vendor, cha bu chòir dhuinn suathadh no atharrachadh orra. Tha an fheadhainn anns a bheil ùidh againn gu h-ìosal, le BroadcastServicerProvider ciorramach gu bunaiteach, 's dòcha air sgàth 's gur ann ainneamh a thèid a chleachdadh.

Bidh na solaraichean seirbheis sin uile a’ ruith bho mhullach gu bonn, ag ath-aithris an liosta dà uair:

  • Tha a’ chiad tionndadh a’ coimhead airson dòigh roghnach register(), feumail airson (mu dheireadh) rudeigin a chaidh a rèiteachadh ron mhodh a chuir an gnìomh boot().
  • bidh an dàrna tionndadh a’ cur an gnìomh am modh boot() de gach solaraiche. A-rithist, aon às deidh aon, bho mhullach gu bonn, den raon 'providers'.
  • Mu dheireadh, às deidh a h-uile solaraiche seirbheis a bhith air a phròiseasadh, gluaisidh Laravel air adhart gu bhith a ’parsadh na slighe (slighe), a’ ruith an rianadair, a ’cleachdadh teamplaidean, msaa.

Solaraichean Seirbheis Laravel rodefiniti

I Service Providers air a ghabhail a-steach ann an Laravel, a bheil a h-uile duine a tha an làthair sa phasgan app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Tha iad uile nan clasaichean PHP, gach fear co-cheangailte ris a chuspair fhèin: App, Auth, Broadcasting, Events e Routes. Ach tha aon rud cumanta aca uile: modh boot().

Taobh a-staigh an dòigh sin, is urrainn dhuinn còd sam bith a sgrìobhadh co-cheangailte ri gin de na h-earrannan sin: auth, events, route, etc. Ann am faclan eile, chan eil ann an Solaraichean Seirbheis ach clasaichean airson cuid de ghnìomhachd cruinneil a chlàradh.

Tha iad air leth mar “solaraichean” leis gu bheil iad a ’ruith gu math tràth ann an cuairt-beatha an tagraidh, agus mar sin tha rudeigin cruinneil goireasach an seo mus ruig an sgriobt gnìomhachaidh gu Modalan no Rianadairean.

Tha a’ mhòr-chuid den ghnìomhachd anns an RouteServiceProvider, seo an còd:

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

Seo an clas far a bheil na faidhlichean air an rèiteachadh routeLe routes/web.phproutes/api.php air a ghabhail a-steach gu bunaiteachdefinita. Thoir an aire gu bheil rèiteachaidhean eadar-dhealaichte ann airson an API cuideachd: ro-leasachan Endpoint /api agus bathar meadhanach api dha na h-uile routes.

Faodaidh sinn an deasachadh service providers, nach eil sa phasgan /vendor. Tha gnàthachadh nam faidhlichean sin air a dhèanamh nuair a tha mòran shlighean agad agus gu bheil thu airson an sgaradh ann am faidhlichean sònraichte. Bidh thu a 'cruthachadh routes/auth.php agus cuir na slighean ann, an uairsin bidh thu "comas" am faidhle sin sa mhodh boot() di RouteServiceProvider, dìreach cuir ris an treas seantans:

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.
`Route::middleware('web') // or maybe you want another middleware?
    ->group(base_path('routes/auth.php'));

AppServiceProvider tha e falamh. Eisimpleir àbhaisteach de chòd a chur ris AppServiceProvider, mu dheidhinn luchdachadh leisg a chuir dheth ann an Eloquent . Gus seo a dhèanamh, feumaidh tu dìreach cuir dà loidhne ris anns a' mhodh boot():

// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Tilgidh seo eisgeachd mura h-eil modal dàimh air a luchdachadh.

Cruthaich do chuid fhèin service provider gnàthail

A bharrachd air na faidhlichean ro-làimhdefinites, is urrainn dhuinn fear ùr a chruthachadh gu furasta Service Provider, co-cheangailte ri cuspairean eile seach an fheadhainn rodefichrìochnaich mar auth/event/routes.

Is e eisimpleir gu math àbhaisteach an rèiteachadh sealladh Blade. Is urrainn dhuinn stiùireadh a chruthachadh Blade, agus an uairsin cuir an còd sin a-steach don mhodh boot() sam bith service provider, a 'gabhail a-steach an àbhaist AppServiceProvider. Cruthaichidh sinn a-nis a ViewServiceProvider fa leth.

Is urrainn dhuinn a ghineadh leis an òrdugh seo:

php artisan make:provider ViewServiceProvider

A ghineas an clas cho rodefinite:

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

Mar a chì sinn a-staigh tha dà dhòigh ann:

An dòigh clàraidh ().

Tha an dòigh clàraidh () a’ toirt cothrom dhuinn deficeanglaichean nish ris a’ ghobhar seirbheis againn. Mar eisimpleir, anns a 'chòd a leanas:

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

Tha $this->app na chaochladair cruinneil ann an laravel a gheibh clas singleton tron ​​​​app.

Tha Singleton na fheart. Nuair a chuireas sinn am feart seo an sàs, tha sinn ag innse don tagradh nach bu chòir ach aon eisimpleir a bhith anns an tagradh gu lèir ge bith dè an clas a thèid seachad mar pharamadair san app. Tha seo a’ ciallachadh gun tèid MyClass fhuasgladh aon uair agus nach bi ach aon eisimpleir ann, a gheibhear thuige leis a’ chaochladair my_class.

An dòigh boot().

Leigidh am modh boot() leat cothrom fhaighinn air a h-uile seirbheis a chaidh a chlàradh roimhe a’ cleachdadh modh a’ chlàir. Faodaidh tu an uairsin an t-seirbheis gu lèir a thoirt a-steach don tagradh agad a’ cleachdadh an dòigh seo.

A 'dol air ais chun eisimpleir roimhe, leig dhuinn an dòigh a thoirt air falbh register() agus a-staigh boot() cuir ris a’ chòd stiùiridh Blade:

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

Eisimpleir eile de ViewServiceProvider meas View Composers, seo an criomag Luchdaich a-nuas Laravel bho làrach-lìn oifigeil :

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

Gus ruith, feumaidh an solaraiche ùr seo a bhith air a chur ris / a chlàradh ris an raon solaraiche a-staigh 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

Is dòcha gum biodh ùidh agad ann an:

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.