લેખ

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એરેમાં નાઇટ્સ 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 પૂર્વdefiનીતિ

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 માટે વિવિધ ગોઠવણીઓ પણ છે: એન્ડપોઇન્ટ ઉપસર્ગ /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 કસ્ટમાઇઝ કરેલ

પૂર્વ ફાઇલો ઉપરાંતdefiનાઇટ્સ, અમે સરળતાથી એક નવું બનાવી શકીએ છીએ 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() પદ્ધતિ

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

તમને આમાં પણ રસ હોઈ શકે છે:

ઇનોવેશન ન્યૂઝલેટર
નવીનતા પરના સૌથી મહત્વપૂર્ણ સમાચારને ચૂકશો નહીં. તેમને ઇમેઇલ દ્વારા પ્રાપ્ત કરવા માટે સાઇન અપ કરો.

તાજેતરના લેખો

બાળકો માટે રંગીન પૃષ્ઠોના ફાયદા - તમામ ઉંમરના લોકો માટે જાદુની દુનિયા

રંગ દ્વારા સુંદર મોટર કૌશલ્ય વિકસાવવાથી બાળકોને લેખન જેવી વધુ જટિલ કુશળતા માટે તૈયાર કરવામાં આવે છે. રંગ કરવા માટે…

2 મે 2024

ભાવિ અહીં છે: શિપિંગ ઉદ્યોગ વૈશ્વિક અર્થતંત્રમાં કેવી રીતે ક્રાંતિ લાવી રહ્યો છે

નૌકાદળ ક્ષેત્ર એ સાચી વૈશ્વિક આર્થિક શક્તિ છે, જેણે 150 અબજના બજાર તરફ નેવિગેટ કર્યું છે...

1 મે 2024

પ્રકાશકો અને OpenAI આર્ટિફિશિયલ ઇન્ટેલિજન્સ દ્વારા પ્રક્રિયા કરાયેલ માહિતીના પ્રવાહને નિયંત્રિત કરવા માટે કરાર પર હસ્તાક્ષર કરે છે

ગયા સોમવારે, ફાઇનાન્શિયલ ટાઇમ્સે OpenAI સાથેના સોદાની જાહેરાત કરી હતી. FT તેના વિશ્વ કક્ષાના પત્રકારત્વને લાઇસન્સ આપે છે...

30 એપ્રિલ 2024

ઓનલાઈન ચુકવણીઓ: સ્ટ્રીમિંગ સેવાઓ તમને કાયમ માટે કેવી રીતે ચૂકવણી કરે છે તે અહીં છે

લાખો લોકો સ્ટ્રીમિંગ સેવાઓ માટે ચૂકવણી કરે છે, માસિક સબ્સ્ક્રિપ્શન ફી ચૂકવે છે. સામાન્ય અભિપ્રાય છે કે તમે…

29 એપ્રિલ 2024

તમારી ભાષામાં ઇનોવેશન વાંચો

ઇનોવેશન ન્યૂઝલેટર
નવીનતા પરના સૌથી મહત્વપૂર્ણ સમાચારને ચૂકશો નહીં. તેમને ઇમેઇલ દ્વારા પ્રાપ્ત કરવા માટે સાઇન અપ કરો.

અમને અનુસરો