প্রবন্ধ

লারাভেলে সার্ভিস প্রোভাইডার: তারা কি এবং কিভাবে লারাভেলে সার্ভিস প্রোভাইডার ব্যবহার করবেন

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().
  • দ্বিতীয় পুনরাবৃত্তি পদ্ধতিটি কার্যকর করে boot() সমস্ত প্রদানকারীর। আবার, এক এক করে, উপরে থেকে নীচে, অ্যারের 'providers'.
  • অবশেষে, সমস্ত পরিষেবা প্রদানকারী প্রক্রিয়াকরণের পর, লারাভেল পাথ (রুট) পার্সিং, কন্ট্রোলার চালানো, টেমপ্লেট ব্যবহার করা ইত্যাদির দিকে এগিয়ে যায়।

সেবা প্রদানকারী লারাভেল প্রিdefiনিতি

I Service Providers লারাভেলের অন্তর্ভুক্ত, ফোল্ডারে উপস্থিত সকলেই app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

এগুলি সমস্ত পিএইচপি ক্লাস, প্রতিটি তার নিজস্ব বিষয়ের সাথে সম্পর্কিত: 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-এর জন্য বিভিন্ন কনফিগারেশনও রয়েছে: এন্ডপয়েন্ট প্রিফিক্স /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()
    {
        //
    }
}

আমরা ভিতরে দেখতে পাচ্ছি দুটি পদ্ধতি আছে:

রেজিস্টার() পদ্ধতি

register() পদ্ধতি আমাদের অনুমতি দেয় defiআমাদের পরিষেবা পাত্রে nish লিঙ্ক. উদাহরণস্বরূপ, নিম্নলিখিত কোডে:

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

$this->অ্যাপ হল ল্যারাভেলের একটি গ্লোবাল ভেরিয়েবল যা একটি সিঙ্গলটন ক্লাস অ্যাপের মাধ্যমে অ্যাক্সেস করতে পারে।

সিঙ্গেলটন একটি বৈশিষ্ট্য। এই বৈশিষ্ট্যটি প্রয়োগ করার সময়, আমরা অ্যাপ্লিকেশনটিকে অবহিত করছি যে অ্যাপটিতে প্যারামিটার হিসাবে যে ক্লাস পাস করা হোক না কেন পুরো অ্যাপ্লিকেশনটিতে শুধুমাত্র একটি উদাহরণ থাকতে হবে। এর মানে হল যে MyClass একবার সমাধান করা হবে এবং শুধুমাত্র একটি উদাহরণ থাকবে, যা my_class ভেরিয়েবল ব্যবহার করে অ্যাক্সেস করা যেতে পারে।

বুট() পদ্ধতি

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, এখানে স্নিপেট অফিসিয়াল লারাভেল সাইট থেকে :

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

এছাড়াও আপনি আগ্রহী হতে পারে:

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

সাম্প্রতিক নিবন্ধ

ক্যাটানিয়া পলিক্লিনিকে অ্যাপল দর্শকের সাথে অগমেন্টেড রিয়েলিটিতে উদ্ভাবনী হস্তক্ষেপ

অ্যাপল ভিশন প্রো কমার্শিয়াল ভিউয়ার ব্যবহার করে ক্যাটানিয়া পলিক্লিনিকে একটি চক্ষুরোগ অপারেশন করা হয়েছিল...

3 মে 2024

শিশুদের জন্য রঙিন পৃষ্ঠাগুলির উপকারিতা - সব বয়সের জন্য একটি জাদু বিশ্ব

রঙের মাধ্যমে সূক্ষ্ম মোটর দক্ষতার বিকাশ শিশুদের লেখার মতো জটিল দক্ষতার জন্য প্রস্তুত করে। রঙ…

2 মে 2024

ভবিষ্যত এখানে: শিপিং শিল্প কীভাবে বৈশ্বিক অর্থনীতিতে বিপ্লব ঘটাচ্ছে

নৌ সেক্টর একটি সত্যিকারের বৈশ্বিক অর্থনৈতিক শক্তি, যা 150 বিলিয়ন বাজারের দিকে নেভিগেট করেছে...

1 মে 2024

প্রকাশকরা এবং OpenAI কৃত্রিম বুদ্ধিমত্তা দ্বারা প্রক্রিয়াকৃত তথ্যের প্রবাহ নিয়ন্ত্রণ করতে চুক্তি স্বাক্ষর করে

গত সোমবার, ফাইন্যান্সিয়াল টাইমস ওপেনএআই-এর সাথে একটি চুক্তি ঘোষণা করেছে। FT তার বিশ্বমানের সাংবাদিকতার লাইসেন্স দেয়...

30 এপ্রিল 2024

আপনার ভাষায় উদ্ভাবন পড়ুন

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

আমাদের অনুসরণ