වෙනත් වචන වලින් කිවහොත්, සේවා සපයන්නන් යනු Laravel නම් එන්ජිමක "සේවා කන්ටේනරය" නම් ටැංකියට "පන්තියේ" ඉන්ධන වත් කරන පුනීලයක් වැනි ය.
අපි config/app.php විවෘත කළහොත් අපට "provider" යන නම සහිත අරාවක් පෙනෙනු ඇත.
'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
ඒවා පටවා තිබේද?
ඒවා තමයි 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 සඳහා විවිධ වින්යාසයන් ද ඇති බව සලකන්න: Endpoint උපසර්ගය /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
සැකසුණුපෙර ගොනු වලට අමතරවdefinites, අපිට ලේසියෙන්ම අලුත් එකක් හදන්න පුළුවන් Service Provider
, එම පෙර මාතෘකා හැර වෙනත් මාතෘකා වලට සම්බන්ධdefiලෙස අවසන් auth
/event
/routes
.
සාමාන්ය උදාහරණයක් වන්නේ දර්ශන වින්යාසයයි Blade
. අපට නියෝගයක් නිර්මාණය කළ හැකිය Blade
, ඉන්පසු එම කේතය ක්රමයට එක් කරන්න boot(
) කිසිදු service provider
, පෙරනිමිය ඇතුළුව AppServiceProvider
. දැන් අපි A නිර්මාණය කරමු 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()
{
//
}
}
ඇතුළත අපට පෙනෙන පරිදි, ක්රම දෙකක් තිබේ:
රෙජිස්ටර් () ක්රමය අපට ඉඩ දෙයි definish අපගේ සේවා බහාලුම් වෙත සබැඳි. උදාහරණයක් ලෙස, පහත කේතයේ:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app යනු තනි පන්තියකට යෙදුම හරහා ප්රවේශ විය හැකි laravel හි ගෝලීය විචල්යයකි.
Singleton යනු ලක්ෂණයකි. මෙම විශේෂාංගය යොදන විට, යෙදුමේ පරාමිතියක් ලෙස කුමන පන්තියක් සමත් වුවද සම්පූර්ණ යෙදුමේ එක් අවස්ථාවක් පමණක් තිබිය යුතු බව අපි යෙදුමට දන්වමු. මෙයින් අදහස් කරන්නේ MyClass එක වරක් විසඳනු ඇති අතර my_class විචල්යය භාවිතයෙන් ප්රවේශ විය හැකි එක් අවස්ථාවක් පමණක් ඇති බවයි.
boot() ක්රමය මඟින් රෙජිස්ටර් ක්රමය භාවිතයෙන් කලින් ලියාපදිංචි කර ඇති සියලුම සේවාවන් වෙත ප්රවේශ වීමට ඔබට ඉඩ සලසයි. එවිට ඔබට මෙම ක්රමය භාවිතයෙන් සම්පූර්ණ සේවාවම ඔබගේ යෙදුමට ඇතුළත් කළ හැක.
පෙර උදාහරණයට ආපසු යමු, අපි ක්රමය ඉවත් කරමු register()
සහ ඇතුළත boot()
බ්ලේඩ් විධාන කේතය එක් කරන්න:
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 ක වෙළඳපලක් කරා ගමන් කර ඇත.
පසුගිය සඳුදා ෆිනෑන්ෂල් ටයිම්ස් OpenAI සමඟ ගිවිසුමක් නිවේදනය කළේය. FT එහි ලෝක මට්ටමේ පුවත්පත් කලාවට බලපත්ර ලබා දෙයි…
මිලියන ගණනක් ජනතාව ප්රවාහ සේවා සඳහා ගෙවයි, මාසික දායක ගාස්තු ගෙවයි. පොදු මතය වන්නේ ඔබ...