مقالات

Laravel ۾ سروس فراهم ڪندڙ: اهي ڇا آهن ۽ Laravel ۾ سروس فراهم ڪندڙ ڪيئن استعمال ڪجي

Laravel سروس فراهم ڪندڙ مرڪزي جڳھ آھن جتي ايپليڪيشن شروع ڪئي وئي آھي. اهو آهي، بنيادي Laravel خدمتون ۽ ايپليڪيشن خدمتون، ڪلاس، ۽ انهن جي انحصار مهيا ڪندڙن ذريعي سروس ڪنٽينر ۾ رکيل آهن. 

ٻين لفظن ۾، سروس فراهم ڪندڙ هڪ فنل وانگر آهن، جنهن جي ذريعي اسان "ڪلاس" ايندھن کي ٽينڪ ۾ "سروس ڪنٽينر" سڏيو ويندو آهي جنهن کي 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 ڇا اهي ڀريل آهن؟ 

اهي اهي آهن defiصف ۾ nites 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().
  • ٻئي iteration جو طريقو executes boot() سڀني مهيا ڪندڙن جي. ٻيهر، هڪ هڪ ڪري، مٿي کان هيٺ، صف جي 'providers'.
  • آخرڪار، سڀني سروس فراهم ڪندڙن تي عمل ٿيڻ کان پوء، Laravel رستي (رستو) کي پارس ڪرڻ، ڪنٽرولر کي هلائڻ، ٽيمپليٽ استعمال ڪندي، وغيره تي هلندو آهي.

سروس مهيا ڪندڙ: Laravel predefiنيتي

I Service Providers Laravel ۾ شامل آهن، اهي سڀئي فولڊر ۾ موجود آهن app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

اهي سڀئي PHP ڪلاس آهن، هر هڪ پنهنجي پنهنجي موضوع سان لاڳاپيل آهي: App, Auth, Broadcasting, Events e Routes. پر انهن سڀني ۾ هڪ شيءِ عام آهي: طريقو boot().

انهي طريقي جي اندر، اسان انهن حصن مان ڪنهن سان لاڳاپيل ڪوڊ لکي سگهون ٿا: auth, events, routeوغيره ٻين لفظن ۾، سروس فراهم ڪندڙ صرف ڪلاس آهن ڪجهه عالمي ڪارڪردگي کي رجسٽر ڪرڻ لاء.

اهي الڳ الڳ آهن "فراهم ڪندڙ" ڇاڪاڻ ته اهي ايپليڪيشن لائف سائيڪل ۾ تمام جلدي هلندا آهن، تنهنڪري ڪجهه گلوبل هتي آسان آهي ان کان اڳ جو عملدرآمد اسڪرپٽ ماڊلز يا ڪنٽرولرز تائين پهچي وڃي.

گهڻو ڪري ڪارڪردگي 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 لاءِ پڻ مختلف تشڪيل آھن: Endpoint prefix /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. اچو ته ھاڻي ٺاھيون a 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اسان جي خدمت ڪنٽينر تي nish لنڪ. مثال طور، هيٺ ڏنل ڪوڊ ۾:

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

$this->app laravel ۾ هڪ عالمي متغير آهي جنهن کي هڪ سنگل ڪلاس ائپ ذريعي رسائي سگهي ٿو.

سنگلٽن هڪ خاصيت آهي. جڏهن هن فيچر کي لاڳو ڪري رهيا آهيون، اسان ايپليڪيشن کي ڄاڻ ڏيون ٿا ته ايپ ۾ جيڪو به ڪلاس پاس ڪيو ويو آهي، ان کي پوري ايپليڪيشن ۾ صرف هڪ مثال هجڻ گهرجي. هن جو مطلب آهي ته MyClass هڪ ڀيرو حل ڪيو ويندو ۽ صرف هڪ مثال هوندو، جيڪو استعمال ڪري سگهجي ٿو My_class متغير استعمال ڪندي.

boot() جو طريقو

boot() طريقو توهان کي سڀني خدمتن تائين رسائي حاصل ڪرڻ جي اجازت ڏئي ٿو جيڪي اڳ ۾ رجسٽر ٿيل رجسٽرڊ طريقا استعمال ڪندي. توھان وري ھن طريقي کي استعمال ڪندي پنھنجي ايپليڪيشن ۾ پوري سروس شامل ڪري سگھو ٿا.

پوئين مثال ڏانھن واپس وڃو، اچو ته طريقي کي ختم ڪريو 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

توھان پڻ دلچسپي وٺندا آھيو:

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

تازيون مضمونون

Augmented Reality ۾ جديد مداخلت، ڪيٽينيا پولي ڪلينڪ ۾ ايپل ناظر سان

ڪيٽينيا پولي ڪلينڪ ۾ ايپل ويزن پرو ڪمرشل ناظر استعمال ڪندي هڪ چشمي جو آپريشن ڪيو ويو…

3 2024

ٻارن لاءِ رنگين صفحن جا فائدا - سڀني عمرن لاءِ جادوءَ جي دنيا

رنگ سازي ذريعي سٺي موٽر صلاحيتن کي ترقي ڪرڻ ٻارن کي وڌيڪ پيچيده صلاحيتن لاء تيار ڪري ٿو جهڙوڪ لکڻ. رنگ ڏيڻ…

2 2024

مستقبل هتي آهي: ڪيئن شپنگ انڊسٽري عالمي معيشت ۾ انقلاب آڻيندي آهي

بحري شعبي هڪ حقيقي عالمي معاشي طاقت آهي، جيڪا 150 بلين مارڪيٽ جي طرف نيويگيٽ ڪئي آهي ...

1 2024

پبلشرز ۽ OpenAI مصنوعي ذهانت پاران پروسيس ڪيل معلومات جي وهڪري کي منظم ڪرڻ لاءِ معاهدن تي دستخط ڪن ٿا

گذريل سومر، فنانشل ٽائمز OpenAI سان هڪ ڊيل جو اعلان ڪيو. ايف ٽي پنهنجي عالمي سطح جي صحافت کي لائسنس ڏئي ٿو ...

30 اپريل 2024

پنھنجي ٻوليءَ ۾ جدت پڙھو

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

اسان جي تابعداري ڪريو