வேறு வார்த்தைகளில் கூறுவதானால், சேவை வழங்குநர்கள் ஒரு புனல் போன்றவர்கள், இதன் மூலம் லாராவெல் என்ற இயந்திரத்தின் "சேவை கொள்கலன்" எனப்படும் தொட்டியில் "வகுப்பு" எரிபொருளை ஊற்றுகிறோம்.
நாம் 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
மற்றும் மிடில்வேர் 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
தனிப்பயனாக்கப்பட்டமுன் கோப்புகளுக்கு கூடுதலாகdefinites, நாம் எளிதாக புதிய ஒன்றை உருவாக்க முடியும் 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->பயன்பாடு என்பது லாராவெலில் உள்ள உலகளாவிய மாறியாகும், இதை ஒரு சிங்கிள்டன் வகுப்பு பயன்பாட்டின் மூலம் அணுக முடியும்.
சிங்கிள்டன் ஒரு அம்சம். இந்த அம்சத்தைப் பயன்படுத்தும்போது, பயன்பாட்டில் எந்த வகுப்பில் ஒரு அளவுருவாக தேர்ச்சி பெற்றாலும், அது முழுப் பயன்பாட்டில் ஒரு நிகழ்வை மட்டுமே கொண்டிருக்க வேண்டும் என்பதை பயன்பாட்டிற்குத் தெரிவிக்கிறோம். இதன் பொருள் 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 அதன் உலகத் தரம் வாய்ந்த பத்திரிகைக்கு உரிமம் அளிக்கிறது…
மில்லியன் கணக்கான மக்கள் ஸ்ட்ரீமிங் சேவைகளுக்கு பணம் செலுத்துகிறார்கள், மாதாந்திர சந்தா கட்டணத்தை செலுத்துகிறார்கள். நீங்கள் என்பது பொதுவான கருத்து...