ፅሁፎች

አገልግሎት አቅራቢዎች በላራቬል፡ ምን እንደሆኑ እና አገልግሎት አቅራቢዎችን በላራቬል እንዴት እንደሚጠቀሙ

የላራቬል አገልግሎት አቅራቢዎች አፕሊኬሽኑ የተጀመረበት ማዕከላዊ ቦታ ነው። ማለትም የኮር ላራቬል አገልግሎቶች እና የመተግበሪያ አገልግሎቶች፣ ክፍሎች እና ጥገኖቻቸው በአገልግሎት አቅራቢዎች በኩል ይቀመጣሉ። 

በሌላ አነጋገር አገልግሎት ሰጪዎች ላራቬል በሚባል ሞተር ውስጥ "አገልግሎት ኮንቴይነር" በሚባል ታንክ ውስጥ "ክፍል" ነዳጅ እንደምናፈስስበት ፈንጠዝያ ናቸው።

ምሳሌ

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'.
  • በመጨረሻም, ሁሉም አገልግሎት ሰጪዎች ከተሰሩ በኋላ, ላራቬል መንገዱን (መንገድን), መቆጣጠሪያውን ለማስኬድ, አብነቶችን በመጠቀም, ወዘተ.

አገልግሎት ሰጪዎች ላራቬል ቅድመdefiniti

I Service Providers በላራቬል ውስጥ የተካተቱት ሁሉም በአቃፊው ውስጥ ይገኛሉ app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

ሁሉም የPHP ክፍሎች ናቸው፣ እያንዳንዱም ከራሱ ርዕስ ጋር ይዛመዳል፡ App, Auth, Broadcasting, Events e Routes. ግን ሁሉም አንድ የሚያመሳስላቸው ነገር አለ: ዘዴ boot().

በዚያ ዘዴ ውስጥ፣ ከእነዚህ ክፍሎች ውስጥ ከማንኛቸውም ጋር የተያያዘ ማንኛውንም ኮድ መጻፍ እንችላለን፡- auth, events, routeወዘተ. በሌላ አነጋገር፣ አገልግሎት አቅራቢዎች አንዳንድ ዓለም አቀፍ ተግባራትን ለመመዝገብ ብቻ ክፍሎች ናቸው።

እንደ "አቅራቢዎች" ተለያይተዋል ምክንያቱም በመተግበሪያው የህይወት ኡደት ውስጥ በጣም ቀደም ብለው ስለሚሮጡ፣ ስለዚህ ፈጻሚው ስክሪፕት ወደ ሞዴሎች ወይም ተቆጣጣሪዎች ከመድረሱ በፊት አንድ ዓለም አቀፋዊ ነገር ምቹ ነው።

አብዛኛው ተግባር በ RouteServiceአቅራቢው ውስጥ ነው፣ ኮዱ እዚህ አለ፡-

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 ለሁሉም 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()
    {
        //
    }
}

ከውስጥ እንደምናየው ሁለት ዘዴዎች አሉ-

የመመዝገቢያ () ዘዴ

የመመዝገቢያ () ዘዴ ይፈቅዳል defiወደ አገልግሎት መያዣችን nish አገናኞች። ለምሳሌ፣ በሚከተለው ኮድ፡-

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

$this->መተግበሪያ ነጠላ ቶን ክፍል በመተግበሪያው ሊደርስበት የሚችል ላራቬል ውስጥ ያለ ዓለም አቀፍ ተለዋዋጭ ነው።

Singleton ባህሪ ነው። ይህንን ባህሪ በሚተገበርበት ጊዜ በመተግበሪያው ውስጥ እንደ ልኬት የሚያልፍ ማንኛውም ክፍል በአጠቃላይ መተግበሪያ ውስጥ አንድ ምሳሌ ብቻ ሊኖረው እንደሚገባ ለመተግበሪያው እያሳወቅን ነው። ይህ ማለት MyClass አንድ ጊዜ መፍትሄ ያገኛል እና አንድ ምሳሌ ብቻ ይኖረዋል፣ይህም my_class ተለዋዋጭ በመጠቀም ሊደረስበት ይችላል።

የማስነሻ () ዘዴ

የቡት () ዘዴ ቀደም ሲል የመመዝገቢያ ዘዴን በመጠቀም የተመዘገቡትን ሁሉንም አገልግሎቶች እንዲያገኙ ያስችልዎታል. ከዚያ ይህንን ዘዴ በመጠቀም አጠቃላይ አገልግሎቱን በመተግበሪያዎ ውስጥ ማካተት ይችላሉ።

ወደ ቀደመው ምሳሌ እንመለስ, ዘዴውን እናስወግድ register() እና ውስጥ boot() የ Blade መመሪያ ኮድ ያክሉ

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

እንዲሁም የሚከተሉትን ሊፈልጉ ይችላሉ፦

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

የቅርብ ጊዜ ጽሁፎች

Veeam ከጥበቃ እስከ ምላሽ እና ማገገሚያ ድረስ ለቤዛዌር በጣም አጠቃላይ ድጋፍን ያቀርባል

Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…

23 April 2024

አረንጓዴ እና ዲጂታል አብዮት፡- የመተንበይ ጥገና የነዳጅ እና ጋዝ ኢንዱስትሪን እንዴት እየለወጠ ነው።

የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…

22 April 2024

የዩኬ ፀረ እምነት ተቆጣጣሪ የBigTech ማንቂያ በጄኔአይ ላይ ያስነሳል።

የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…

18 April 2024

ካሳ አረንጓዴ፡ ለወደፊት ጣሊያን የኢነርጂ አብዮት

የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…

18 April 2024

ፈጠራን በቋንቋዎ ያንብቡ

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

ይከተሉን