બીજા શબ્દોમાં કહીએ તો, સેવા પ્રદાતાઓ એક ફનલ જેવા છે જેના દ્વારા આપણે લારાવેલ નામના એન્જિનના "સર્વિસ કન્ટેનર" તરીકે ઓળખાતી ટાંકીમાં "વર્ગ" બળતણ રેડીએ છીએ.
જો આપણે 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
, Eloquent માં આળસુ લોડિંગને અક્ષમ કરવા વિશે છે. આ કરવા માટે, તમારે ફક્ત જરૂર છે બે લીટીઓ ઉમેરો પદ્ધતિમાં boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
જો રિલેશનશીપ મોડલ લોડ ન થાય તો આ અપવાદ લાવશે.
service provider
કસ્ટમાઇઝ કરેલપૂર્વ ફાઇલો ઉપરાંતdefiનાઇટ્સ, અમે સરળતાથી એક નવું બનાવી શકીએ છીએ 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()
{
//
}
}
જેમ આપણે અંદર જોઈ શકીએ છીએ ત્યાં બે પદ્ધતિઓ છે:
register() પદ્ધતિ અમને પરવાનગી આપે છે 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 તેના વિશ્વ કક્ષાના પત્રકારત્વને લાઇસન્સ આપે છે...
લાખો લોકો સ્ટ્રીમિંગ સેવાઓ માટે ચૂકવણી કરે છે, માસિક સબ્સ્ક્રિપ્શન ફી ચૂકવે છે. સામાન્ય અભિપ્રાય છે કે તમે…