אין אנדערע ווערטער, סערוויס פּראַוויידערז זענען ווי אַ לייקע דורך וואָס מיר גיסן "קלאַס" ברענוואַרג אין אַ טאַנק גערופן די "דינסט קאַנטיינער" פון אַ מאָטאָר גערופן לאַראַוועל.
אויב מיר עפֿענען 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'
.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.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
, איז וועגן דיסייבאַלינג פויל לאָודינג אין עלאַקוואַנט . צו טאָן דאָס, איר נאָר דאַרפֿן לייג צוויי שורות אין דער שיטה 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ניט לינקס צו אונדזער סערוויס קאַנטיינער. פֿאַר בייַשפּיל, אין די פאלגענדע קאָד:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this-> אַפּ איז אַ גלאבאלע בייַטעוודיק אין לאַראַוועל אַז אַ סינגלעטאָן קלאַס קענען אַקסעס דורך די אַפּ.
סינגלעטאָן איז אַ שטריך. ווען אַפּלייינג דעם שטריך, מיר ינפאָרמירן די אַפּלאַקיישאַן אַז וועלכער קלאַס איז דורכגעגאנגען ווי אַ פּאַראַמעטער אין די אַפּ זאָל האָבן בלויז איין בייַשפּיל אין די גאנצע אַפּלאַקיישאַן. דעם מיטל אַז 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
, דאָ איז די סניפּאַט פֿון דער באַאַמטער 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
איר קען אויך זיין אינטערעסירט אין:
דעוועלאָפּינג פייַן מאָטאָר סקילז דורך קאַלערינג פּריפּערז קינדער פֿאַר מער קאָמפּליצירט סקילז ווי שרייבן. צו קאָלירן ...
די נייוואַל סעקטאָר איז אַ אמת גלאבאלע עקאָנאָמיש מאַכט, וואָס איז נאַוואַגייטיד צו אַ 150 ביליאָן מאַרק ...
לעצטע מאנטאג, די Financial Times מודיע אַ אָפּמאַך מיט OpenAI. FT לייסאַנסיז זיין וועלט-קלאַס זשורנאליסטיק ...
מיליאַנז פון מענטשן באַצאָלן פֿאַר סטרימינג באַדינונגס, צאָלן כוידעשלעך אַבאָנעמענט פיז. עס איז פּראָסט מיינונג אַז איר ...