Lravel life cycle (Bangla)
Comment (0)
Admin
184
লারাভেল লাইফসাইকেল....
লারাভেল একটা রিকুয়েষ্টকে কিভাবে হ্যান্ডেল করে? আমরা সাধারানত যা দেখি যে web.php থেকে কোনো একটা রাউট কন্ট্রলারে যাচ্ছে এবং এর পর একটা রেস্পন্স পাওয়া যাচ্ছে। কিন্তু রিকুয়েষ্ট এর পুরো যাত্রাটা হয়তো অনেকের কাছেই ক্লিয়ার না। চলুন তাহলে লারাভেল লাইফসাইকেলে একবার ঘুরে করে আসা যাক।
রিকুয়েষ্ট এর ক্ষেত্রে যাত্রাটা শুরু হয় ওয়েব সার্ভার (এপাচি/এঞ্জিনএক্স) থেকে। আর সেখান থেকে রিকুএষ্টটি চলে আসে সরাসরি public/index.php ফাইলে। অর্থাৎ লারাভেল লাইফ সাইকেলের যাত্রা শুরু এখান থেকেই। .htaccess ফাইল এর সাহায্যে যত ধরণের রিকুয়েষ্ট আসে, সবগুলো রিকুয়েস্ট index.php তে পাঠানো হয়।
index.php এর প্রথম গুরুত্বপূর্র্ণ কাজ হলো composer থেকে জেনারেট হওয়া ভেন্ডরের ভেতরের সকল ফাইলকে রিকোয়ারর্ড করা। যার মাধ্যমে আমরা ভেন্ডরের ভেতরে থাকা ক্লাসগুলোকে আমাদের প্রজেক্টে ব্যববহার করতে পারি।
এর পরের ধাপে index.php লারাভেল এপ্লিকেশনের একটি ইন্সট্যান্স রিসিভ করে। যে ইন্সট্যান্সটি রিটার্রন হয়েছে bootstrap/app.php ফাইল থেকে। আমরা যদি এই ফাইলটিতে যাই তাহলে দেখবো প্রথমেই Application ক্লাসটির একটি ইনস্ট্যান্স তৈরি করা হয়েছে এবং তার কন্সট্রাক্টরে application এর বেজ পাথটি পাস্ করে দেয়া হয়েছে। আর তার পরের ধাপে ৩ তা ক্লাসকে পুরো Application এর সাথে singleton এর মাধ্যমে বাইন্ড করে দেওয়া হয়েছে। আর তা হলো :
১। Illuminate\Contracts\Http\Kernel যাকে বাইন্ড করা হয়েছে App\Http\Kernel::class এই ক্লাসটির সাথে। অর্থাৎ Illuminate\Contracts\Http\Kernel এই ইন্টারফেসটির জন্য App\Http\Kernel::class এর ইন্সট্যান্সটি তৈরী হবে। আর এটির কাজ হলো Http থেকে আসা সকল রিকুয়েস্টগুলোকে হ্যান্ডেল করা.
২। Illuminate\Contracts\Console\Kernel যাকে বাইন্ড করা হয়েছে App\Console\Kernel::class এই ক্লাসটির সাথে। আর এটির কাজ হলো CLI - command-line interface থেকে আসা সকল রিকুয়েস্টগুলোকে হ্যান্ডেল করা.
৩। Illuminate\Contracts\Debug\ExceptionHandler::class যাকে বাইন্ড করা হয়েছে App\Exceptions\Handler::class এই ক্লাসটির সাথে। আর এই ক্লাসটিই প্রজেক্ট এর সকল Exception গুলোকে Handle করে।
আর এই বাইন্ডিং গুলো শেষ হলেই এপ্লিকেশনের ইন্সট্যান্সটি রিটার্র্ন হয় index.php এর কাছে।
যাত্রা এখনো শেষ হয়নি, এখনো অনেকটা পথ বাকি আছে , চলুন আগে বাড়াই।
এর পর Http রিকুয়েষ্টকে Handle করার জন্য App\Http\Kernel::class এর একটি ইন্সট্যান্স নেয়া হয় যেটাকে পুর্বেই বাইন্ড করা হয়েছিলো। আর এখানে Kernel এর handle মেথডে রিকোয়েস্ট কে ক্যাপচার করে পাঠানো হয়। যার ডেফিনেশন রয়েছে Illuminate\Foundation\Http\Kernel এই ফাইলে। handle মেথডটি রেস্পন্সের জন্য রিকুএস্টটিকে sendRequestThroughRouter() নামের আরেকটি মেথডে পাঠিয়ে দেয়া হয়। আর যেখান থেকে bootstrappers গুলোকে boot করা হয়।
bootstrappers প্রপার্টিটির মধ্যে কিছু ক্লাস আছে যেগুলোকে লাইফসাইকেলের এ পর্যায়ে boot করা হয়। তম্নধ্যে গুরুত্বপূর্র্ণ ২ টি ক্লাস হলো RegisterFacades, RegisterProviders. অর্থাৎ আমরা যে config/app.php তে এলিয়াস এবং প্রোভাইডারর্সের এরে দেখি, সেই ক্লাস গুলিই এখানে লোড হয়। আর রিউকুয়েস্ট হ্যান্ডেলের গুরুত্বপূর্র্ণ একটি প্রোভাইডার এখানে লোড হয় তা হলো RouteServiceProvider. আর এটিই আপনার রিকুয়েস্টকে web.php তে পাঠায়, আর যাত্রার পরের পথটা আপনারা অলরেডি চিনেন।
Wait.............
কন্ট্রোলার থেকে রিটার্ন করার পরেও কিছুটা পথ হয়তো অচেনা মনে হতে পারে। চলুন যাত্রার শেষ অবধি যাই।
কন্ট্রোলার থেকে যখন একটি রেস্পন্স পাঠানো হয়, রেস্পন্সটি রাউট মিডিলিয়ার এর মধ্যে দিয়ে বাহিরের দিকে ব্যাক করে। আর এটি রেস্পন্সটিকে পরিবর্র্তন ও পরীক্ষা করার একটু সুযগ প্রদান করে।
এবং ফাইনাল্লি রেসপন্সটি একটি অবজেক্ট নিয়ে আবার index.php তে ফিরে আসে এবং index.php send() মেথড কল করার মাধ্যমে ভিজিটরের ব্রাউজারে কাঙ্খিত রেস্পনসটি দেখিয়ে তার যাত্রাটি এখানেই সমাপ্ত করে।
Comments (0)
Your Comment