ලිපි

Laravel හි සේවා සපයන්නන්: ඔවුන් මොනවාද සහ Laravel හි සේවා සපයන්නන් භාවිතා කරන්නේ කෙසේද

Laravel සේවා සපයන්නන් යෙදුම ආරම්භ කරන මධ්‍යම ස්ථානයයි. එනම්, මූලික Laravel සේවා සහ යෙදුම් සේවා, පන්ති සහ ඒවායේ පරායත්තතා සපයන්නන් හරහා සේවා බහාලුම්වල තබා ඇත. 

වෙනත් වචන වලින් කිවහොත්, සේවා සපයන්නන් යනු Laravel නම් එන්ජිමක "සේවා කන්ටේනරය" නම් ටැංකියට "පන්තියේ" ඉන්ධන වත් කරන පුනීලයක් වැනි ය.

උදාහරණයක්

අපි config/app.php විවෘත කළහොත් අපට "provider" යන නම සහිත අරාවක් පෙනෙනු ඇත.

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

මේවා laravel සමඟින් සපයනු ලබන සේවා සපයන්නන්ගෙන් සමහරකි, එනම් සේවා බහාලුම්වල තබා ඇති මූලික සේවාවන්.

මම විට 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 මාර්ගය (මාර්ගය) විග්‍රහ කිරීම, පාලකය ධාවනය කිරීම, සැකිලි භාවිතා කිරීම යනාදිය වෙත ගමන් කරයි.

සේවා සපයන්නන් 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 උපසර්ගය /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()
    {
        //
    }
}

ඇතුළත අපට පෙනෙන පරිදි, ක්රම දෙකක් තිබේ:

රෙජිස්ටර් () ක්රමය

රෙජිස්ටර් () ක්‍රමය අපට ඉඩ දෙයි definish අපගේ සේවා බහාලුම් වෙත සබැඳි. උදාහරණයක් ලෙස, පහත කේතයේ:

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

$this->app යනු තනි පන්තියකට යෙදුම හරහා ප්‍රවේශ විය හැකි laravel හි ගෝලීය විචල්‍යයකි.

Singleton යනු ලක්ෂණයකි. මෙම විශේෂාංගය යොදන විට, යෙදුමේ පරාමිතියක් ලෙස කුමන පන්තියක් සමත් වුවද සම්පූර්ණ යෙදුමේ එක් අවස්ථාවක් පමණක් තිබිය යුතු බව අපි යෙදුමට දන්වමු. මෙයින් අදහස් කරන්නේ 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, මෙන්න ස්නිපට් එක නිල 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

ඔබේ භාෂාවෙන් නවෝත්පාදනය කියවන්න

නවෝත්පාදන පුවත් පත්‍රිකාව
නවෝත්පාදනය පිළිබඳ වැදගත්ම පුවත් අතපසු නොකරන්න. ඒවා විද්‍යුත් තැපෑලෙන් ලබා ගැනීමට ලියාපදිංචි වන්න.

පසු අපට