بیشتر

په لارویل کې د خدماتو چمتو کونکي: دوی څه دي او په لارویل کې د خدماتو چمتو کونکي کارولو څرنګوالی

Laravel خدمت چمتو کونکي مرکزي ځای دی چیرې چې غوښتنلیک پیل شوی. دا دی، اصلي لاریول خدمتونه او د غوښتنلیک خدمتونه، ټولګي، او د دوی انحصار د چمتو کونکو له لارې د خدماتو کانټینر کې ځای پرځای شوي. 

په بل عبارت، د خدماتو چمتو کونکي د یو فینل په څیر دي چې د هغې له لارې موږ د لاراول په نوم د انجن "خدمت کانټینر" په نوم ټانک ته "طبقه" تیل اچوو.

د مثال په

که موږ 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 ایا دوی بار شوي دي؟ 

دوی هغه دي definites په صف کې 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 predefiنیتي

I Service Providers په Laravel کې شامل دي، ټول هغه کسان دي چې په فولډر کې شتون لري app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

دا ټول د PHP ټولګي دي، هر یو یې د خپلې موضوع سره تړاو لري: App, Auth, Broadcasting, Events e Routes. مګر دوی ټول یو شی په مشترک ډول لري: میتود boot().

د دې میتود دننه، موږ کولی شو د دې برخو څخه کوم اړوند کوډ ولیکئ: auth, events, route, etc. په بل عبارت، د خدماتو چمتو کونکي یوازې ټولګي دي چې ځینې نړیوال فعالیت ثبت کړي.

دوی د "وړاندې کونکو" په توګه جلا دي ځکه چې دوی د غوښتنلیک د ژوند دورې کې خورا دمخه پرمخ ځي ، نو یو څه نړیوال دلته مناسب دي مخکې لدې چې اجرا کونکي سکریپټ ماډلونو یا کنټرولرانو ته ورسیږي.

ډیری فعالیت د 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 او منځنی وسايل 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, په Eloquent کې د سست بار کولو غیر فعالولو په اړه دی د دې کولو لپاره، تاسو یوازې اړتیا لرئ دوه کرښې اضافه کړئ په طریقه boot():

د نوښت خبر پاڼه
د نوښت په اړه خورا مهم خبرونه له لاسه مه ورکوئ. د بریښنالیک له لارې دوی ترلاسه کولو لپاره لاسلیک وکړئ.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

دا به یو استثنا وغورځوي که چیرې د اړیکې ماډل بار نه وي.

خپل ځان جوړ کړئ service provider دودیزه

د پخوانیو فایلونو سربیرهdefinites، موږ کولی شو په اسانۍ سره یو نوی جوړ کړو 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->app په لاراویل کې یو نړیوال متغیر دی چې یو واحد ټولګی د ایپ له لارې لاسرسی کولی شي.

Singleton یوه ځانګړتیا ده. کله چې د دې خصوصیت پلي کول، موږ غوښتنلیک ته خبر ورکوو چې هر هغه ټولګي چې په اپلیکیشن کې د پیرامیټر په توګه تیریږي باید په ټول غوښتنلیک کې یوازې یو مثال ولري. دا پدې مانا ده چې MyClass به یو ځل حل شي او یوازې یو مثال به ولري، کوم چې د my_class متغیر په کارولو سره لاسرسی کیدی شي.

د بوټ () طریقه

د بوټ () میتود تاسو ته اجازه درکوي ټولو خدماتو ته لاسرسی ومومئ چې دمخه د راجسټر میتود په کارولو سره ثبت شوي. بیا تاسو کولی شئ د دې میتود په کارولو سره ټول خدمت په خپل غوښتنلیک کې شامل کړئ.

مخکینی مثال ته بیرته ځي، راځئ چې طریقه لیرې کړو register() او دننه boot() د بلیډ لارښود کوډ اضافه کړئ:

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

تاسو ممکن په دې کې هم علاقه ولرئ:

د نوښت خبر پاڼه
د نوښت په اړه خورا مهم خبرونه له لاسه مه ورکوئ. د بریښنالیک له لارې دوی ترلاسه کولو لپاره لاسلیک وکړئ.

وروستي مقالې

Veeam د ransomware لپاره خورا پراخه ملاتړ وړاندې کوي ، له محافظت څخه تر غبرګون او رغیدو پورې

د Veeam لخوا Coveware به د سایبر غصب پیښو غبرګون خدماتو چمتو کولو ته دوام ورکړي. Coveware به د عدلي او درملنې وړتیاوې وړاندې کړي ...

23 اپریل 2024

شنه او ډیجیټل انقلاب: د وړاندوینې وړ ساتنه څنګه د تیلو او ګاز صنعت بدلوي

د وړاندوینې ساتنه د تیلو او ګاز سکتور کې انقلاب رامینځته کوي ، د نبات مدیریت لپاره د نوښت او فعال چلند سره.

22 اپریل 2024

د انګلستان ضد باور تنظیم کونکي د GenAI په اړه د BigTech الارم راپورته کوي

د انګلستان CMA د مصنوعي استخباراتو په بازار کې د لوی ټیک چلند په اړه خبرداری خپور کړی. هلته…

18 اپریل 2024

کاسا ګرین: په ایټالیا کې د دوامداره راتلونکي لپاره د انرژي انقلاب

د "شنو خونو" فرمان، چې د اروپایي اتحادیې لخوا د ودانیو د انرژۍ موثریت لوړولو لپاره جوړ شوی، خپل مقننه پروسه پای ته رسولې ده ...

18 اپریل 2024

نوښت په خپله ژبه ولولئ

د نوښت خبر پاڼه
د نوښت په اړه خورا مهم خبرونه له لاسه مه ورکوئ. د بریښنالیک له لارې دوی ترلاسه کولو لپاره لاسلیک وکړئ.

مونږ سره په