တစ်နည်းဆိုရသော် ဝန်ဆောင်မှုပေးသူများသည် Laravel ဟုခေါ်သော အင်ဂျင်၏ "service container" ဟုခေါ်သော တိုင်ကီထဲသို့ "အတန်းအစား" လောင်စာဆီ လောင်းထည့်သည့် လမ်းကြောင်းတစ်ခုနှင့်တူသည်။
config/app.php ကိုဖွင့်ပါက "provider" အမည်ဖြင့် array တစ်ခုကိုတွေ့ရပါမည်။
'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
တင်နေကြပြီလား?
သူတို့က အဲဒါတွေ defiarray တွင် 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()
နည်းလမ်းမစမီ configure လုပ်ထားသည့်အရာများကို (နောက်ဆုံးတွင်) လုပ်ဆောင်ရန်အတွက် အသုံးဝင်သည်။ boot()
.boot()
ပံ့ပိုးသူအားလုံး၏ တဖန်၊ တစ်ခုပြီးတစ်ခု၊ အပေါ်မှအောက်ခြေ၊ array ၏ 'providers'
.I Service Providers
Laravel တွင် ပါဝင်သော၊ ဖိုဒါထဲတွင် ရှိနေသော အရာများ အားလုံး ဖြစ်ကြသည် app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
၎င်းတို့သည် PHP အတန်းများအားလုံးဖြစ်ပြီး၊ တစ်ခုစီသည် ၎င်း၏ကိုယ်ပိုင်အကြောင်းအရာနှင့်သက်ဆိုင်သည်- App
, Auth
, Broadcasting
, Events
e Routes
. ဒါပေမယ့် သူတို့အားလုံးမှာ တူညီတဲ့အရာတစ်ခုရှိတယ်၊ နည်းလမ်း boot()
.
ထိုနည်းလမ်းအတွင်းတွင်၊ ထိုကဏ္ဍများနှင့်သက်ဆိုင်သည့် မည်သည့်ကုဒ်ကိုမဆို ရေးသားနိုင်သည်- auth
, events
, route
စသည်တို့ တစ်နည်းဆိုရသော် ဝန်ဆောင်မှုပေးသူများသည် ကမ္ဘာလုံးဆိုင်ရာလုပ်ဆောင်ချက်အချို့ကို စာရင်းသွင်းရန် အတန်းများသာဖြစ်သည်။
၎င်းတို့သည် အပလီကေးရှင်းဘဝစက်ဝန်းတွင် အလွန်စောစီးစွာ အလုပ်လုပ်သောကြောင့် ၎င်းတို့သည် "ပံ့ပိုးပေးသူများ" အဖြစ် သီးခြားဖြစ်သောကြောင့်၊ လုပ်ဆောင်ချက် script သည် Models သို့မဟုတ် Controllers သို့မရောက်ရှိမီ တစ်ကမ္ဘာလုံးအတိုင်းအတာဖြင့် အဆင်ပြေပါသည်။
လုပ်ဆောင်နိုင်စွမ်းအများစုသည် 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.php
e routes/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 တွင် ပျင်းရိသော loading ကို disable လုပ်ခြင်းအကြောင်းဖြစ်သည်။ ဒီလိုလုပ်ဖို့၊ သင်ပဲလိုအပ်ပါတယ်။ စာကြောင်းနှစ်ကြောင်းထည့်ပါ။ နည်းလမ်းထဲမှာ 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
ဘယ် class က ထုတ်ပေးမှာမို့လို့ ကြိုမှာလဲ။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() method က ကျွန်တော်တို့ကို ခွင့်ပြုပါတယ်။ defiကျွန်ုပ်တို့၏ဝန်ဆောင်မှုကွန်တိန်နာသို့ nish လင့်ခ်များ။ ဥပမာအားဖြင့်၊ အောက်ပါကုဒ်တွင်၊
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app သည် singleton class သည် app မှတဆင့်ဝင်ရောက်နိုင်သော laravel ရှိ global variable တစ်ခုဖြစ်သည်။
Singleton သည်အင်္ဂါရပ်တစ်ခုဖြစ်သည်။ ဤအင်္ဂါရပ်ကိုအသုံးပြုသောအခါတွင် မည်သည့်အတန်းကိုမဆို အက်ပ်အတွင်းရှိ ကန့်သတ်ချက်တစ်ခုအဖြစ် ဖြတ်သွားပါက အပလီကေးရှင်းတစ်ခုလုံးတွင် သာဓကတစ်ခုသာရှိသင့်ကြောင်း ကျွန်ုပ်တို့အား အသိပေးအပ်ပါသည်။ ဆိုလိုသည်မှာ MyClass သည် တစ်ကြိမ်ဖြေရှင်းပြီးဖြစ်ကာ my_class variable ကို အသုံးပြု၍ ဝင်ရောက်နိုင်သည့် ဥပမာတစ်ခုသာရှိမည်ဖြစ်သည်။
boot() နည်းလမ်းသည် သင့်အား မှတ်ပုံတင်သည့်နည်းလမ်းကို အသုံးပြု၍ ယခင်က စာရင်းသွင်းထားသော ဝန်ဆောင်မှုအားလုံးကို ဝင်ရောက်ခွင့်ပြုသည်။ ထို့နောက် ဤနည်းလမ်းကို အသုံးပြု၍ သင့်အပလီကေးရှင်းတွင် ဝန်ဆောင်မှုတစ်ခုလုံးကို ထည့်သွင်းနိုင်သည်။
ယခင်နမူနာသို့ ပြန်သွားကာ နည်းလမ်းကို ဖယ်ရှားလိုက်ကြပါစို့ 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
ဤတွင် အတိုအထွာ တရားဝင် 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
သင်လည်း စိတ်ဝင်စားနိုင်သည်-
ရေတပ်ကဏ္ဍသည် ကမ္ဘာလုံးဆိုင်ရာ စီးပွားရေးအင်အားကြီးဖြစ်ပြီး၊ ဘီလီယံ ၁၅၀ ရှိသော စျေးကွက်ဆီသို့ လျှောက်လှမ်းနေသော...
ပြီးခဲ့သည့်တနင်္လာနေ့တွင် Financial Times သည် OpenAI နှင့်သဘောတူညီချက်တစ်ခုကြေငြာခဲ့သည်။ FT သည် ၎င်း၏ ကမ္ဘာ့အဆင့်မီ သတင်းစာပညာကို လိုင်စင်ထုတ်ပေးသည်...
သန်းပေါင်းများစွာသောလူများသည် streaming ဝန်ဆောင်မှုများအတွက်ပေးဆောင်ပြီးလစဉ်စာရင်းသွင်းမှုအခကြေးငွေပေးဆောင်သည်။ အများအမြင်မှာ သင်...
Veeam မှ Coveware သည် ဆိုက်ဘာငွေညှစ်မှု ဖြစ်ရပ်ကို တုံ့ပြန်သည့် ဝန်ဆောင်မှုများကို ဆက်လက်ပံ့ပိုးပေးပါမည်။ Coveware သည် မှုခင်းဆေးပညာနှင့် ပြန်လည်ပြင်ဆင်ခြင်းစွမ်းရည်များကို ပေးဆောင်လိမ့်မည်...