Mewn geiriau eraill, mae darparwyr gwasanaeth fel twndis lle rydyn ni'n arllwys tanwydd "dosbarth" i danc o'r enw "cynhwysydd gwasanaeth" injan o'r enw Laravel.
Os byddwn yn agor config/app.php fe welwn arae gyda'r enw "darparwr"
'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,
.
.
.
],
Dyma rai o’r darparwyr gwasanaeth a ddarperir ynghyd â larafel, h.y. gwasanaethau sylfaenol sy’n cael eu rhoi yn y cynhwysydd gwasanaeth.
service provider
ydyn nhw'n cael eu perfformio?Os edrychwn ar y ddogfennaeth cylch bywyd ar gais , gweithredir y ffeiliau canlynol ar y cychwyn:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
a'i Middlewares
Service Providers
: cynnwys yr erthygl honPa service provider
ydyn nhw wedi'u llwytho?
Dyma nhw definites yn yr arae 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,
],
];
Fel y gallwn weld, mae rhestr o service provider
ddim yn gyhoeddus yn y ffolder /vendor
, ni ddylem gyffwrdd â hwy na'u haddasu. Mae'r rhai sydd o ddiddordeb i ni isod, gyda BroadcastServicerProvider
anabl yn ddiofyn, mae'n debyg oherwydd mai anaml y caiff ei ddefnyddio.
Mae'r holl ddarparwyr gwasanaeth hyn yn rhedeg o'r brig i'r gwaelod, gan ailadrodd y rhestr dwywaith:
register()
, yn ddefnyddiol ar gyfer (yn y pen draw) gweithredu rhywbeth wedi'i ffurfweddu cyn y dull boot()
.boot()
o'r holl ddarparwyr. Eto, fesul un, o'r top i'r gwaelod, o'r arae 'providers'
.I Service Providers
wedi'u cynnwys yn Laravel, a yw pawb sy'n bresennol yn y ffolder app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Maent i gyd yn ddosbarthiadau PHP, pob un yn ymwneud â'i bwnc ei hun: App
, Auth
, Broadcasting
, Events
e Routes
. Ond mae gan bob un ohonynt un peth yn gyffredin: dull boot()
.
O fewn y dull hwnnw, gallwn ysgrifennu unrhyw god sy'n gysylltiedig ag unrhyw un o'r adrannau hynny: auth
, events
, route
, etc. Mewn geiriau eraill, dim ond dosbarthiadau i gofrestru rhai swyddogaethau byd-eang yw Darparwyr Gwasanaeth.
Maent ar wahân fel "darparwyr" oherwydd eu bod yn rhedeg yn gynnar iawn yng nghylch bywyd y cais, felly mae rhywbeth byd-eang yn gyfleus yma cyn i'r sgript weithredu gyrraedd Modelau neu Reolwyr.
Mae'r rhan fwyaf o'r swyddogaethau yn y RouteServiceProvider, dyma'r cod:
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());
});
}
}
Dyma'r dosbarth lle mae'r ffeiliau wedi'u ffurfweddu route
, Gyda routes/web.php
e routes/api.php
cynnwys yn ddiofyndefinita. Sylwch fod yna wahanol gyfluniadau ar gyfer yr API hefyd: rhagddodiad Endpoint /api
a llestri canol api
i bawb routes
.
Gallwn olygu'r service providers
, nad ydynt yn y ffolder /vendor
. Mae addasu'r ffeiliau hyn yn cael ei wneud pan fydd gennych lawer o lwybrau ac eisiau eu gwahanu'n ffeiliau penodol. Rydych chi'n creu routes/auth.php
a rhowch y llwybrau yno, yna rydych chi'n "galluogi" y ffeil honno yn y dull boot()
di RouteServiceProvider
, ychwanegwch y drydedd frawddeg:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
mae'n wag. Enghraifft nodweddiadol o ychwanegu cod AppServiceProvider
, yn ymwneud ag analluogi llwytho diog yn Eloquent . I wneud hyn, dim ond angen i chi ychwanegu dwy linell yn y dull boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Bydd hyn yn taflu eithriad os na chaiff model perthynas ei lwytho.
service provider
customizedYn ogystal â'r ffeiliau ymlaen llawdefinites, gallwn yn hawdd greu un newydd Service Provider
, perthynol i bynciau eraill heblaw y rhai cyndefigorffen fel auth
/event
/routes
.
Enghraifft weddol nodweddiadol yw'r ffurfweddiad golygfa Blade
. Gallwn greu cyfarwyddeb Blade
, ac yna ychwanegwch y cod hwnnw i'r dull boot(
) o unrhyw service provider
, gan gynnwys y rhagosodiad AppServiceProvider
. Gadewch i ni nawr greu a ViewServiceProvider
gwahanu.
Gallwn ei gynhyrchu gyda'r gorchymyn hwn:
php artisan make:provider ViewServiceProvider
A fydd yn cynhyrchu y dosbarth mor cyndefineis:
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()
{
//
}
}
Fel y gallwn weld y tu mewn, mae dau ddull:
Mae'r dull cofrestr() yn caniatáu i ni wneud hynny deficysylltiadau nish i'n cynhwysydd gwasanaeth. Er enghraifft, yn y cod canlynol:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
Mae $this->app yn newidyn byd-eang mewn laravel y gall dosbarth sengl ei gyrchu trwy'r ap.
Mae Singleton yn nodwedd. Wrth gymhwyso'r nodwedd hon, rydym yn hysbysu'r cais mai dim ond un achos ddylai fod gan ba bynnag ddosbarth sy'n cael ei basio fel paramedr yn yr ap yn y cais cyfan. Mae hyn yn golygu y bydd MyClass yn cael ei ddatrys unwaith a dim ond un achos fydd ganddo, y gellir ei gyrchu gan ddefnyddio'r newidyn my_class.
Mae'r dull cychwyn () yn eich galluogi i gael mynediad at yr holl wasanaethau a gofrestrwyd yn flaenorol gan ddefnyddio'r dull cofrestr. Yna gallwch chi gynnwys y gwasanaeth cyfan yn eich cais gan ddefnyddio'r dull hwn.
Gan fynd yn ôl at yr enghraifft flaenorol, gadewch i ni gael gwared ar y dull register()
ac o fewn boot()
ychwanegu cod cyfarwyddeb Blade:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Enghraifft arall o ViewServiceProvider
ystyried View Composers
, dyma'r pyt o wefan swyddogol 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) {
//
});
}
}
I redeg, rhaid ychwanegu/cofrestru'r darparwr newydd hwn i'r arae darparwyr mewnol 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
Efallai y bydd gennych ddiddordeb hefyd mewn:
Ddydd Llun diwethaf, cyhoeddodd y Financial Times gytundeb ag OpenAI. Mae FT yn trwyddedu ei newyddiaduraeth o safon fyd-eang…
Mae miliynau o bobl yn talu am wasanaethau ffrydio, gan dalu ffioedd tanysgrifio misol. Mae’n farn gyffredin eich bod chi…
Bydd Coveware gan Veeam yn parhau i ddarparu gwasanaethau ymateb i ddigwyddiadau cribddeiliaeth seiber. Bydd Coveware yn cynnig galluoedd fforensig ac adfer…
Mae gwaith cynnal a chadw rhagfynegol yn chwyldroi'r sector olew a nwy, gyda dull arloesol a rhagweithiol o reoli planhigion.…