Articles

Masu Ba da Sabis a Laravel: menene su da yadda ake amfani da Masu Ba da Sabis a Laravel

Masu ba da sabis na Laravel sune tsakiyar wurin da aka fara aikace-aikacen. Wato, ainihin sabis na Laravel da sabis na aikace-aikace, azuzuwan, da abin dogaronsu ana sanya su cikin kwandon sabis ta hanyar masu samarwa. 

Wato, masu ba da sabis kamar mazurari ne da muke zuba man “class” a cikin tanki mai suna “kwangon sabis” na injin da ake kira Laravel.

misali

Idan muka bude config/app.php za mu ga wani tsari mai suna "mai bayarwa"

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

Waɗannan su ne wasu daga cikin masu ba da sabis ɗin da aka bayar tare da laravel, watau sabis na yau da kullun waɗanda aka sanya a cikin kwandon sabis.

Lokacin da ni service provider ana yin su?

Idan muka dubi takardun akan buƙatun rayuwa , ana aiwatar da waɗannan fayilolin a farkon:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php da nasa Middlewares
  • Service Providers: abun cikin wannan labarin

Wanne service provider an lodin su? 

Waɗannan su ne definites a cikin tsararru 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,
 
    ],
 
];

Kamar yadda muke iya gani, akwai jerin sunayen service provider ba jama'a a cikin babban fayil ba /vendor, kada mu taɓa ko gyara su. Wadanda suke sha'awar mu suna ƙasa, tare da BroadcastServicerProvider naƙasasshe ta tsohuwa, mai yiwuwa saboda ba kasafai ake amfani da shi ba.

Duk waɗannan masu ba da sabis suna gudana daga sama zuwa ƙasa, suna maimaita lissafin sau biyu:

  • Amsar farko tana neman hanyar zaɓin zaɓi register(), mai amfani don (ƙarshe) aiwatar da wani abu da aka saita kafin hanyar boot().
  • sake maimaitawa na biyu yana aiwatar da hanyar boot() na duk masu samarwa. Bugu da kari, daya bayan daya, sama zuwa kasa, na tsararru 'providers'.
  • A ƙarshe, bayan an aiwatar da duk masu ba da sabis, Laravel ya ci gaba zuwa karkatar da hanya (hanyar), gudanar da mai sarrafawa, ta amfani da samfuri, da sauransu.

Masu Ba da Sabis Laravel predefiba

I Service Providers An haɗa su a cikin Laravel, duk waɗanda ke cikin babban fayil ɗin app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Dukkansu azuzuwan PHP ne, kowannensu yana da alaƙa da nasa batun: App, Auth, Broadcasting, Events e Routes. Amma duk suna da abu ɗaya a cikin gama gari: hanya boot().

A cikin wannan hanyar, za mu iya rubuta kowace lamba da ke da alaƙa da ɗayan waɗannan sassan: auth, events, route, da dai sauransu. A takaice dai, Masu Ba da Sabis ajujuwa ne kawai don yin rijistar wasu ayyukan duniya.

Sun bambanta a matsayin "masu samarwa" saboda suna aiki da wuri a cikin tsarin rayuwar aikace-aikacen, don haka wani abu na duniya ya dace a nan kafin rubutun aiwatarwa ya isa ga Model ko Masu Gudanarwa.

Yawancin ayyuka suna cikin RouteServiceProvice, ga lambar:

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

Wannan shine ajin da aka tsara fayilolin routetare da routes/web.phproutes/api.php hada da tsohuwadefinita. Lura cewa ga API ɗin akwai kuma saiti daban-daban: prefix na ƙarshe /api da middleware api ga duka routes.

Za mu iya gyara da service providers, waɗanda ba a cikin babban fayil ɗin /vendor. Keɓance waɗannan fayilolin ana yin su ne lokacin da kuke da hanyoyi da yawa kuma kuna son raba su cikin takamaiman fayiloli. Ka ƙirƙira routes/auth.php kuma sanya hanyoyin a can, sannan ku "ba da damar" wannan fayil ɗin a cikin hanyar boot() di RouteServiceProvider, kawai ƙara jumla ta uku:

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

AppServiceProvider fanko ne. Misali na al'ada na ƙara lamba AppServiceProvider, shine game da kashe ragge lodi a cikin Batutuwa. Don yin wannan, kuna buƙatar kawai ƙara layi biyu a cikin hanyar boot():

Jaridar Innovation
Kada ku rasa mafi mahimmancin labarai akan ƙirƙira. Yi rajista don karɓar su ta imel.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Wannan zai jefa banda idan ba a ɗora samfurin dangantaka ba.

Irƙiri naka service provider Musamman

Baya ga pre-fayil ɗindefiNites, za mu iya ƙirƙirar sabon abu cikin sauƙi Service Provider, masu alaƙa da wasu batutuwa fiye da waɗanda suka gabatadefigama kamar auth/event/routes.

Misali na yau da kullun shine tsarin duba Blade. Za mu iya ƙirƙirar umarni Blade, sannan ƙara wannan lambar a cikin hanyar boot() na kowane service provider, gami da tsoho AppServiceProvider. Bari yanzu ƙirƙirar a ViewServiceProvider ware.

Za mu iya samar da shi tare da wannan umarni:

php artisan make:provider ViewServiceProvider

Wanda zai haifar da ajin haka predefinite:

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

Kamar yadda muke iya gani a ciki akwai hanyoyi guda biyu:

Hanyar rajista ().

Hanyar rajista () tana ba mu damar definish hanyoyin haɗi zuwa akwatin sabis ɗin mu. Misali, a cikin code mai zuwa:

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

$this->app shine canjin duniya a cikin laravel wanda ajin singleton zai iya shiga ta app.

Singleton sifa ce. Lokacin amfani da wannan fasalin, muna sanar da aikace-aikacen cewa duk wani aji da aka wuce a matsayin ma'auni a cikin app ya kamata ya sami misali ɗaya kawai a cikin gabaɗayan aikace-aikacen. Wannan yana nufin cewa MyClass za a warware sau ɗaya kuma zai sami misali ɗaya kawai, wanda za'a iya samun dama ga ta amfani da ma'anar my_class.

Hanyar boot().

Hanyar boot() tana ba ku damar samun dama ga duk ayyukan da aka yi rajista a baya ta hanyar yin rijistar. Sannan zaku iya haɗa duk sabis ɗin a cikin aikace-aikacenku ta amfani da wannan hanyar.

Komawa ga misalin da ya gabata, bari mu cire hanyar register() kuma a ciki boot() ƙara lambar umarnin Blade:

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

Wani misali na ViewServiceProvider girmamawa View Composers, ga snippet daga shafin Laravel na hukuma :

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

Don gudu, wannan sabon mai bada dole ne a ƙara/yi rijista zuwa cikin tsararrun mai badawa 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

Hakanan kuna iya sha'awar:

Jaridar Innovation
Kada ku rasa mafi mahimmancin labarai akan ƙirƙira. Yi rajista don karɓar su ta imel.

Kwanan nan labarin

Veeam yana fasalta mafi cikakken tallafi don ransomware, daga kariya zuwa amsawa da murmurewa

Coveware ta Veeam zai ci gaba da ba da sabis na amsa abin da ya faru ta hanyar intanet. Coveware zai ba da damar bincikar bincike da damar gyarawa…

23 Afrilu 2024

Kore da Juyin Juya Halin Dijital: Yadda Kulawar Hasashen ke Canza Masana'antar Mai & Gas

Kulawa da tsinkaya yana kawo sauyi a fannin mai & iskar gas, tare da sabbin hanyoyin kula da tsirrai.…

22 Afrilu 2024

Mai kula da amincin Burtaniya ya ɗaga ƙararrawar BigTech akan GenAI

Hukumar CMA ta Burtaniya ta ba da gargadi game da halayen Big Tech a cikin kasuwar bayanan sirri. Akwai…

18 Afrilu 2024

Casa Green: juyin juya halin makamashi don dorewar makoma a Italiya

Dokar "Green Houses" da Tarayyar Turai ta tsara don inganta ingantaccen makamashi na gine-gine, ta kammala aikinta na majalisar tare da…

18 Afrilu 2024