Kwa maneno mengine, watoa huduma ni kama funeli ambapo tunamimina mafuta ya "daraja" kwenye tanki inayoitwa "chombo cha huduma" cha injini inayoitwa Laravel.
Tukifungua config/app.php tutaona safu yenye jina "mtoa huduma"
'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,
.
.
.
],
Hawa ni baadhi ya watoa huduma wanaotolewa pamoja na laravel, yaani huduma za msingi ambazo huwekwa kwenye kontena la huduma.
service provider
zinatumbuizwa?Ikiwa tunaangalia nyaraka kwa ombi la mzunguko wa maisha , faili zifuatazo zinatekelezwa mwanzoni:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
na yake Middlewares
Service Providers
: maudhui ya makala hiinini service provider
wamepakiwa?
Wao ni wale definites katika safu 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,
],
];
Kama tunaweza kuona, kuna orodha ya service provider
si hadharani kwenye folda /vendor
, hatupaswi kuzigusa wala kuzirekebisha. Zile zinazotuvutia ziko hapa chini, nazo BroadcastServicerProvider
imezimwa kwa chaguo-msingi, pengine kwa sababu haitumiki sana.
Watoa huduma hawa wote hukimbia kutoka juu hadi chini, wakirudia orodha mara mbili:
register()
, muhimu kwa (hatimaye) kutekeleza kitu kilichosanidiwa kabla ya mbinu boot()
.boot()
wa watoa huduma wote. Tena, moja kwa moja, juu hadi chini, ya safu 'providers'
.I Service Providers
iliyojumuishwa kwenye Laravel, ni wale wote waliopo kwenye folda app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Zote ni madarasa ya PHP, kila moja inahusiana na mada yake mwenyewe: App
, Auth
, Broadcasting
, Events
e Routes
. Lakini wote wana jambo moja kwa pamoja: mbinu boot()
.
Ndani ya njia hiyo, tunaweza kuandika nambari yoyote inayohusiana na sehemu yoyote kati ya hizo: auth
, events
, route
, na kadhalika. Kwa maneno mengine, Watoa Huduma ni madarasa tu ya kusajili utendaji fulani wa kimataifa.
Zimetenganishwa kama "watoa huduma" kwa sababu zinaendeshwa mapema sana katika kipindi cha matumizi, kwa hivyo kitu cha kimataifa kinafaa hapa kabla hati ya kutekeleza haijafika kwa Models au Controllers.
Utendaji mwingi uko kwenye RouteServiceProvider, hapa kuna nambari:
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());
});
}
}
Hili ndilo darasa ambalo faili zimesanidiwa route
, Pamoja na routes/web.php
e routes/api.php
imejumuishwa na chaguo-msingidefinita. Kumbuka kuwa kwa API pia kuna usanidi tofauti: kiambishi awali cha Mwisho /api
na vyombo vya kati api
kwa wote routes
.
Tunaweza kuhariri service providers
, ambazo haziko kwenye folda /vendor
. Kubinafsisha faili hizi hufanywa wakati una njia nyingi na unataka kuzitenganisha katika faili maalum. Unaunda routes/auth.php
na uweke njia hapo, kisha "unawezesha" faili hiyo kwa njia boot()
di RouteServiceProvider
, ongeza sentensi ya tatu:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
ni tupu. Mfano wa kawaida wa kuongeza msimbo AppServiceProvider
, inahusu kuzima upakiaji wa uvivu katika Eloquent . Ili kufanya hivyo, unahitaji tu ongeza mistari miwili katika mbinu boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Hii itatupa ubaguzi ikiwa mtindo wa uhusiano haujapakiwa.
service provider
customizedMbali na faili za awalidefiNites, tunaweza kuunda mpya kwa urahisi Service Provider
, kuhusiana na mada nyingine zaidi ya zile zilizotanguliadefikumaliza kama auth
/event
/routes
.
Mfano wa kawaida ni usanidi wa kutazama Blade
. Tunaweza kuunda mwongozo Blade
, na kisha ongeza nambari hiyo kwenye njia boot(
) yoyote service provider
, ikijumuisha chaguo-msingi AppServiceProvider
. Hebu sasa tutengeneze a ViewServiceProvider
kujitenga.
Tunaweza kuizalisha kwa amri hii:
php artisan make:provider ViewServiceProvider
Ambayo itatoa darasa mapemadefiusiku:
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()
{
//
}
}
Kama tunavyoona ndani kuna njia mbili:
Njia ya kujiandikisha () inaruhusu sisi kufanya hivyo definish viungo kwa chombo chetu cha huduma. Kwa mfano, katika nambari ifuatayo:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->programu ni tofauti ya kimataifa katika laravel ambayo darasa la singleton linaweza kufikia kupitia programu.
Singleton ni kipengele. Wakati wa kutumia kipengele hiki, tunafahamisha programu kwamba darasa lolote linalopitishwa kama kigezo katika programu linapaswa kuwa na tukio moja tu katika programu nzima. Hii inamaanisha kuwa MyClass itatatuliwa mara moja na itakuwa na mfano mmoja tu, ambao unaweza kufikiwa kwa kutumia utofauti wa my_class.
Njia ya boot() hukuruhusu kufikia huduma zote zilizosajiliwa hapo awali kwa kutumia njia ya usajili. Kisha unaweza kujumuisha huduma nzima katika programu yako kwa kutumia njia hii.
Kurudi kwa mfano uliopita, hebu tuondoe njia register()
na ndani boot()
ongeza nambari ya maagizo ya Blade:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Mfano mwingine wa ViewServiceProvider
kujali View Composers
, hiki hapa kipande kidogo kutoka kwa tovuti rasmi ya 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) {
//
});
}
}
Ili kutekeleza, mtoaji huyu mpya lazima aongezwe/asajiliwe kwa safu ya watoa huduma 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
Unaweza pia kupendezwa na:
Kukuza ujuzi mzuri wa magari kupitia kupaka rangi huwatayarisha watoto kwa ujuzi changamano zaidi kama vile kuandika. Kupaka rangi...
Sekta ya majini ni nguvu ya kweli ya kiuchumi duniani, ambayo imepitia kwenye soko la bilioni 150 ...
Jumatatu iliyopita, Financial Times ilitangaza makubaliano na OpenAI. FT inatoa leseni kwa uandishi wake wa habari wa kiwango cha kimataifa…
Mamilioni ya watu hulipia huduma za utiririshaji, kulipa ada za usajili za kila mwezi. Ni maoni ya kawaida kwamba wewe…