অন্য কথায়, পরিষেবা প্রদানকারীরা একটি ফানেলের মতো যার মাধ্যমে আমরা লারাভেল নামক একটি ইঞ্জিনের "পরিষেবা ধারক" নামক ট্যাঙ্কে "শ্রেণীর" জ্বালানী ঢালা।
আমরা 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অ্যারে মধ্যে nites 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
এগুলি সমস্ত পিএইচপি ক্লাস, প্রতিটি তার নিজস্ব বিষয়ের সাথে সম্পর্কিত: 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()
{
//
}
}
আমরা ভিতরে দেখতে পাচ্ছি দুটি পদ্ধতি আছে:
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
, এখানে স্নিপেট অফিসিয়াল লারাভেল সাইট থেকে :
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 তার বিশ্বমানের সাংবাদিকতার লাইসেন্স দেয়...