Laravel Facades
Facades (ফ্যাসাড) Laravel-এর একটি শক্তিশালী ফিচার যা স্ট্যাটিক ইন্টারফেস প্রদান করে অ্যাপ্লিকেশনের সেবাগুলোকে অ্যাক্সেস করার জন্য। এটি মূলত Laravel-এর সার্ভিস কন্টেইনারে রেজিস্টার্ড ক্লাসগুলোর জন্য একটি "স্ট্যাটিক প্রক্সি" হিসেবে কাজ করে।
Facades কি?
Facades হল:
ক্লাসের স্ট্যাটিক রেপ্রেজেন্টেশন (আসল অবজেক্ট নয়)
সার্ভিস কন্টেইনারে রেজিস্টার্ড ক্লাসের শর্টকাট
ইউজার-ফ্রেন্ডলি সিনট্যাক্স প্রদান করে
কেন Facades ব্যবহার করবেন?
সহজ সিনট্যাক্স: কম্প্লেক্স ডিপেন্ডেন্সি ইনজেকশন ছাড়াই
প্রডাক্টিভিটি: দ্রুত কোড লিখতে সাহায্য করে
পাঠযোগ্যতা: কোড সহজে বোঝা যায়
বেসিক উদাহরণ
use Illuminate\Support\Facades\Cache; // Cache ফ্যাসাড ব্যবহার Cache::put('key', 'value', $minutes);
এটি নিচের কোডের সমতুল্য:
$cache = app('cache'); $cache->put('key', 'value', $minutes);
কিভাবে Facades কাজ করে?
আপনি একটি ফ্যাসাড কল করেন (যেমন
Cache::get())Laravel ম্যাজিক মেথড
__callStatic()ব্যবহার করেসার্ভিস কন্টেইনার থেকে সংশ্লিষ্ট অবজেক্ট রেজল্ভ করে
মেথড কলটি আসল অবজেক্টে ডেলিগেট করে
বিল্ট-ইন Facades উদাহরণ
| Facade | আসল ক্লাস | ব্যবহার |
|---|---|---|
Auth | Illuminate\Auth\AuthManager | অথেন্টিকেশন |
DB | Illuminate\Database\DatabaseManager | ডাটাবেস |
Route | Illuminate\Routing\Router | রাউটিং |
Session | Illuminate\Session\SessionManager | সেশন |
Storage | Illuminate\Filesystem\FilesystemManager | ফাইল সিস্টেম |
কাস্টম Facade তৈরি
১. প্রথমে একটি ক্লাস তৈরি করুন
// app/Services/PaymentGateway.php namespace App\Services; class PaymentGateway { public function charge($amount) { // পেমেন্ট লজিক } }
২. সার্ভিস প্রোভাইডারে রেজিস্টার করুন
// AppServiceProvider.php public function register() { $this->app->singleton('payment', function ($app) { return new \App\Services\PaymentGateway(); }); }
৩. Facade ক্লাস তৈরি করুন
// app/Facades/Payment.php namespace App\Facades; use Illuminate\Support\Facades\Facade; class Payment extends Facade { protected static function getFacadeAccessor() { return 'payment'; } }
৪. ব্যবহার করুন
use App\Facades\Payment; Payment::charge(100);
Facades vs ডিপেন্ডেন্সি ইনজেকশন
| Feature | Facades | Dependency Injection |
|---|---|---|
| সিনট্যাক্স | স্ট্যাটিক (Cache::get()) | ইনস্ট্যান্স ($cache->get()) |
| টেস্টেবিলিটি | মক করতে সহজ | নেটিভলি টেস্টেবল |
| রিডেবিলিটি | সংক্ষিপ্ত | এক্সপ্লিসিট ডিপেন্ডেন্সি |
Facades এর সুবিধা
দ্রুত ডেভেলপমেন্ট: কম কোডে বেশি কাজ
পাঠযোগ্যতা: সহজে বোঝা যায়
লার্নিং কার্ভ: নতুনদের জন্য সহজ
Facades এর অসুবিধা
হিডেন ডিপেন্ডেন্সি: ক্লাসের নির্ভরতা স্পষ্ট নয়
স্ট্যাটিক ব্যবহার: কিছু ডেভেলপার এড়িয়ে চলেন
গ্লোবাল স্টেট: টেস্টিং এ সমস্যা করতে পারে
বাস্তব উদাহরণ
use Illuminate\Support\Facades\Mail; use App\Mail\WelcomeEmail; // ফ্যাসাড ব্যবহার করে মেইল পাঠানো Mail::to('user@example.com')->send(new WelcomeEmail()); // ফাইল সিস্টেম এক্সেস use Illuminate\Support\Facades\Storage; Storage::disk('local')->put('file.txt', 'Content');
Facades টেস্টিং
Facades মক করা খুব সহজ:
use Illuminate\Support\Facades\Cache; public function test_cache() { Cache::shouldReceive('get') ->with('key') ->andReturn('value'); $result = Cache::get('key'); $this->assertEquals('value', $result); }
Facades Laravel-এর একটি শক্তিশালী এবস্ট্রাকশন লেয়ার যা ডেভেলপমেন্টকে দ্রুততর এবং সহজ করে তোলে, তবে বড় প্রজেক্টে ডিপেন্ডেন্সি ইনজেকশন প্রেফার করা যেতে পারে।
No comments