Articles

Vanopa Sevhisi muLaravel: zvavari uye mashandisiro eSevhisi Vanopa muLaravel

Laravel sevhisi vanopa ndiyo yepakati nzvimbo inotangwa application. Ndokunge, epakati Laravel masevhisi uye masevhisi ekushandisa, makirasi, uye kutsamira kwavo kunoiswa mumudziyo webasa kuburikidza nevapi. 

Mune mamwe mazwi, vanopa masevhisi vakaita sefunnel yatinodira "class" mafuta mutangi inonzi "service container" yeinjini inonzi Laravel.

muenzaniso

Kana tikavhura config/app.php tichaona array ine zita rekuti "provider"

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

Aya ndiwo mamwe evanopa masevhisi vanopihwa pamwe chete nelaravel, kureva masevhisi ekutanga anoiswa mumudziyo webasa.

Kana i service provider dzinoitwa here?

Kana tikatarisa zvinyorwa pakukumbira lifecycle , mafaera anotevera anoitwa pakutanga:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php neyake Middlewares
  • Service Providers: zviri muchinyorwa chino

Ndeipi service provider dzakaremerwa here? 

Ndivo avo defiyakaitwa muhurongwa 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,
 
    ],
 
];

Sezvatinoona, pane rondedzero ye service provider kwete yeruzhinji muforodha /vendor, hatifaniri kuabata kana kuashandura. Avo vanotifarira vari pazasi, vane BroadcastServicerProvider yakaremara nekusingaperi, pamwe nekuti haiwanzo shandiswa.

Vese ava vanopa masevhisi vanomhanya kubva kumusoro kusvika pasi, vachidzokorora rondedzero kaviri:

  • Yokutanga iteration iri kutsvaga nzira yekuzvisarudzira register(), inobatsira (pakupedzisira) kuita chimwe chinhu chakagadzirirwa pamberi penzira boot().
  • yechipiri iteration inoita nzira boot() yevose vanopa. Zvakare, imwe neimwe, kumusoro kusvika pasi, yehurongwa 'providers'.
  • Chekupedzisira, mushure mekunge vese vanopa masevhisi vagadziriswa, Laravel anoenderera mberi nekuparura nzira (nzira), achimhanyisa mutongi, achishandisa matemplate, nezvimwe.

Sevhisi Vanopa Laravel predefikana

I Service Providers inosanganisirwa muLaravel, vese varipo mufolda app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Iwo ese makirasi ePP, rimwe nerimwe rine chekuita nemusoro wenyaya: App, Auth, Broadcasting, Events e Routes. Asi vese vane chinhu chimwe chakafanana: nzira boot().

Mukati meiyo nzira, tinogona kunyora chero kodhi ine chekuita nechero yezvikamu izvozvo: auth, events, route, nezvimwewo. Mune mamwe mazwi, Vanopa Masevhisi vangori makirasi ekunyoresa mamwe mashandiro epasirese.

Ivo vakapatsanurwa se "vanopa" nekuti vanomhanya nekukurumidza mukushandiswa kwehupenyu hwekushandisa, saka chimwe chinhu chepasirese chiri nyore pano script risati rasvika kuModels kana Controllers.

Mazhinji ekushanda ari muRouteServiceProvider, heino kodhi:

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

Iyi ndiyo kirasi iyo mafaera akagadziriswa routene routes/web.phproutes/api.php inosanganisirwa neiyo defaultdefinita. Ziva kuti kune iyo API kune zvakare akasiyana masisitimu: Endpoint prefix /api uye middleware api kune vose routes.

Tinogona kugadzirisa service providers, izvo zvisiri mufolda /vendor. Kugadzirisa mafaera aya kunoitwa kana uine nzira dzakawanda uye uchida kuzvipatsanura kuita chaiwo mafaera. Iwe gadzira routes/auth.php uye isa nzira ipapo, wobva wa "gonesa" iyo faira munzira boot() di RouteServiceProvider, ingo wedzera mutsara wechitatu:

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

AppServiceProvider haina chinhu. Muenzaniso wakajairika wekuwedzera kodhi AppServiceProvider, ndezvekudzima usimbe kurodha muEloquent . Kuti uite izvi, iwe unongoda chete wedzera mitsetse miviri mu nzira boot():

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Izvi zvinokanda zvakasarudzika kana modhi yehukama isina kurodha.

Gadzira yako wega service provider customized

Mukuwedzera kune predefinited iripo, isu tinogona nyore kugadzira imwe nyowani Service Provider, ine chekuita nemimwe misoro kunze kweiyo yakamboitwadefizvakajeka se auth/event/routes.

Muenzaniso wakajairika ndeyekugadziriswa kwekuona Blade. Tinogona kugadzira rairo Blade, uye wobva wawedzera iyo kodhi mune iyo nzira boot() chero service provider, kusanganisira default AppServiceProvider. Ngatitangei zvino kugadzira a ViewServiceProvider paradzana.

Tinogona kuigadzira nemurairo uyu:

php artisan make:provider ViewServiceProvider

Izvo zvichagadzira kirasi predefimanheru:

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

Sezvatinoona mukati mune nzira mbiri:

Rejista () nzira

Iyo rejista () nzira inotibvumira kuita defibvisa zvinongedzo kumudziyo wedu webasa. Semuenzaniso, mune inotevera kodhi:

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

$this-> app ishanduko yepasi rose mularavel iyo kirasi yesingleton inogona kuwana kuburikidza neapp.

Singleton chinhu. Kana tichishandisa chinhu ichi, tiri kuzivisa chikumbiro kuti chero kirasi inopfuudzwa separameter muapp inofanira kungova nechiitiko chimwe chete mukushandisa kwese. Izvi zvinoreva kuti MyClass ichagadziriswa kamwe chete uye ichange iine muenzaniso mumwe chete, unogona kuwanikwa uchishandisa my_class musiyano.

Iyo boot () nzira

Iyo boot () nzira inokubvumira kuti uwane ese masevhisi akanyoreswa kare uchishandisa nzira yekunyoresa. Iwe unogona ipapo kusanganisira yese sevhisi mukushandisa kwako uchishandisa nzira iyi.

Kudzokera kumuenzaniso wekare, ngatibvisei nzira register() uye mukati boot() wedzera iyo Blade yekuraira kodhi:

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

Mumwe muenzaniso we ViewServiceProvider respect View Composers, heino chidimbu kubva kune yepamutemo Laravel saiti :

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

Kuti umhanye, mupi mutsva uyu anofanirwa kuwedzerwa/kunyoreswa kune ari mugovera array 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

Unogonawo kufarira:

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.

Zvinyorwa zvekare

UK antitrust regulator inosimudza BigTech alarm pamusoro peGenAI

Iyo UK CMA yakapa yambiro nezvemaitiro eBig Tech mumusika wehungwaru hwekugadzira. Ikoko…

18 April 2024

Casa Green: shanduko yesimba kune ramangwana rakagadzikana muItari

Chirevo che "Case Green", chakagadzirwa neEuropean Union kuti chiwedzere kushanda nesimba kwezvivakwa, chapedza hurongwa hwayo hwemutemo ne…

18 April 2024

Ecommerce muItari pa + 27% maererano neChirevo chitsva naCasaleggio Associati

Casaleggio Associati mushumo wepagore weEcommerce muItaly wakapihwa. Chirevo chine musoro unoti "AI-Commerce: miganhu yeEcommerce neArtificial Intelligence".…

17 April 2024

Yakanaka Idea: Bandalux inopa Airpure®, keteni rinochenesa mweya

Mhedzisiro yenguva dzose yekuvandudza tekinoroji uye kuzvipira kune zvakatipoteredza uye kugara zvakanaka kwevanhu. Bandalux inopa Airpure®, tende…

12 April 2024