በሌላ አነጋገር አገልግሎት ሰጪዎች ላራቬል በሚባል ሞተር ውስጥ "አገልግሎት ኮንቴይነር" በሚባል ታንክ ውስጥ "ክፍል" ነዳጅ እንደምናፈስስበት ፈንጠዝያ ናቸው።
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'
.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.php
e routes/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
እንዲሁም የሚከተሉትን ሊፈልጉ ይችላሉ፦
Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…
የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…
የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…
የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…