ਦੂਜੇ ਸ਼ਬਦਾਂ ਵਿੱਚ, ਸੇਵਾ ਪ੍ਰਦਾਤਾ ਇੱਕ ਫਨਲ ਵਾਂਗ ਹੁੰਦੇ ਹਨ ਜਿਸ ਰਾਹੀਂ ਅਸੀਂ "ਕਲਾਸ" ਬਾਲਣ ਨੂੰ ਇੱਕ ਟੈਂਕ ਵਿੱਚ ਡੋਲ੍ਹਦੇ ਹਾਂ ਜਿਸਨੂੰ ਲਾਰਵੇਲ ਕਹਿੰਦੇ ਹਨ ਇੱਕ ਇੰਜਣ ਦੇ "ਸੇਵਾ ਕੰਟੇਨਰ" ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
ਜੇਕਰ ਅਸੀਂ 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
ਲਾਰਵੇਲ ਵਿੱਚ ਸ਼ਾਮਲ, ਉਹ ਸਾਰੇ ਫੋਲਡਰ ਵਿੱਚ ਮੌਜੂਦ ਹਨ 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
, 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
. ਚਲੋ ਹੁਣ ਏ 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->ਐਪ laravel ਵਿੱਚ ਇੱਕ ਗਲੋਬਲ ਵੇਰੀਏਬਲ ਹੈ ਜਿਸਨੂੰ ਇੱਕ ਸਿੰਗਲਟਨ ਕਲਾਸ ਐਪ ਰਾਹੀਂ ਐਕਸੈਸ ਕਰ ਸਕਦਾ ਹੈ।
ਸਿੰਗਲਟਨ ਇੱਕ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ. ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਲਾਗੂ ਕਰਦੇ ਸਮੇਂ, ਅਸੀਂ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸੂਚਿਤ ਕਰ ਰਹੇ ਹਾਂ ਕਿ ਐਪ ਵਿੱਚ ਮਾਪਦੰਡ ਦੇ ਤੌਰ 'ਤੇ ਜੋ ਵੀ ਕਲਾਸ ਪਾਸ ਕੀਤੀ ਗਈ ਹੈ, ਉਸ ਦੀ ਪੂਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਸਿਰਫ ਇੱਕ ਉਦਾਹਰਣ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ 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 ਬਿਲੀਅਨ ਮਾਰਕੀਟ ਵੱਲ ਨੈਵੀਗੇਟ ਕੀਤਾ ਹੈ...
ਪਿਛਲੇ ਸੋਮਵਾਰ, ਫਾਈਨੈਂਸ਼ੀਅਲ ਟਾਈਮਜ਼ ਨੇ ਓਪਨਏਆਈ ਨਾਲ ਇੱਕ ਸੌਦੇ ਦਾ ਐਲਾਨ ਕੀਤਾ। FT ਆਪਣੀ ਵਿਸ਼ਵ ਪੱਧਰੀ ਪੱਤਰਕਾਰੀ ਨੂੰ ਲਾਇਸੰਸ ਦਿੰਦਾ ਹੈ...
ਲੱਖਾਂ ਲੋਕ ਸਟ੍ਰੀਮਿੰਗ ਸੇਵਾਵਾਂ ਲਈ ਭੁਗਤਾਨ ਕਰਦੇ ਹਨ, ਮਹੀਨਾਵਾਰ ਗਾਹਕੀ ਫੀਸ ਅਦਾ ਕਰਦੇ ਹਨ। ਇਹ ਆਮ ਰਾਏ ਹੈ ਕਿ ਤੁਸੀਂ…
Veeam ਦੁਆਰਾ Coveware ਸਾਈਬਰ ਜ਼ਬਰਦਸਤੀ ਘਟਨਾ ਪ੍ਰਤੀਕਿਰਿਆ ਸੇਵਾਵਾਂ ਪ੍ਰਦਾਨ ਕਰਨਾ ਜਾਰੀ ਰੱਖੇਗਾ। ਕੋਵਵੇਅਰ ਫੋਰੈਂਸਿਕ ਅਤੇ ਉਪਚਾਰ ਸਮਰੱਥਾਵਾਂ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰੇਗਾ...