বাংলায় Laravel Framework Laravel Architecture Concepts পর্ব-১: Laravel Request Lifecycle

Last Updated on August 1, 2022 by Masud Alam

Laravel Request Lifecycle কি?

Laravel Request Lifecycle

Laravel Request Lifecycle

আপনি আপনার প্রফেশনাল কাজে কোনো টুল ব্যবহার করার সময়, সেই টুলটি কীভাবে কাজ করে তা যদি আপনি বুঝতে পারেন। তাহলে আপনি আপনার কাজে আরও বেশি আত্মবিশ্বাস বোধ করবেন । একটা Application development এর বেলায়ও একই ভাবে কাজ করে । যখন আপনি বুঝতে পারেন যে আপনার development tool গুলো কীভাবে কাজ করে, আপনি সেগুলি ব্যবহার করে আরও স্বাচ্ছন্দ্য এবং আত্মবিশ্বাসী বোধ করবেন ৷

এই লেখার লক্ষ্য হল Laravel Request Lifecycle কীভাবে কাজ করে তার একটি ভাল, উচ্চ-স্তরের ওভারভিউ দেওয়া। একজন ডেভেলপার লারাভেল ফ্রেমওয়ার্ক এর সামগ্রিক কাঠামোটি ভালোভাবে না জানার দরুন , তার মনে হতে পারে লারাভেল ফ্রেমওয়ার্ক এর অনেক কিছু হয়তো ম্যাজিক এর মতো কাজ করে। আসলে ব্যাপারটা মোটেই তা নয়। আমরা আজকে লারাভেল এর কাঠামোটা কিভাবে কাজ করে তা জানার চেষ্টা করব। এতে আপনি আপনার লারাভেল দিয়ে অ্যাপ্লিকেশনগুলি তৈরি করতে আরও আত্মবিশ্বাসী হবেন। তবে আপনি হয়তো এখনই অনেক terms নাও বুঝতে পারেন, তবে হতাশ হবেন না! শুধু একটু প্রাথমিক বিষয় গুলো বুঝার চেষ্টা করুন এবং আমার পরবর্তী আর্টিকেল গুলো পড়ার সাথে সাথে আপনার লারাভেল সম্পর্কে অভিজ্ঞতা ক্রমান্বয়ে বৃদ্ধি পাবে।

Laravel Request Lifecycle Overview

Laravel Request Life Cycle flow cart

Laravel Request Life Cycle flow cart

Laravel Request Lifecycle কে আমরা ছয় ভাগে ভাগ করতে পারি। আর সেগুলো হচ্ছে নিম্নরুপঃ

  1. First Step/Entry Point
  2. HTTP / Console Kernels
  3. Service Providers
  4. Routing
  5. Finishing Up
  6. Focus On Service Providers

1. First Step/Entry Point

এবার চলুন একে একে প্রত্যেকটি Laravel Request Lifecycle নিয়ে আলোচনা করা যাক।

একটি Laravel অ্যাপ্লিকেশনের সমস্ত অনুরোধের entry point বা সূচনা বিন্দু হল public/index.php ফাইল। সমস্ত অনুরোধ আপনার ওয়েব সার্ভার (Apache / Nginx) কনফিগারেশন দ্বারা রিকোয়েস্ট গুলো প্রথমে এই ফাইলে যায়। যদিও এই index.php ফাইলে খুব বেশি কোড থাকে না। তবে ,লারাভেল ফ্রেমওয়ার্কের বাকি সবকিছু লোড করার জন্য এটি একটি entry point বা সূচনা বিন্দু।

index.php ফাইলটি কম্পোজার জেনারেট করা অটোলোডার এর ডেফিনেশন গুলো লোড করে তারপর bootstrap/app.php থেকে লারাভেল অ্যাপ্লিকেশনের একটি ইনস্ট্যান্স তৈরি করে। বলা যেতে পারে , লারাভেলের প্রথম কাজ হচ্ছে application / service container এর একটি instance তৈরি করা।

2.HTTP / Console Kernels

এরপরে, আগত request টি HTTP kernel বা console kernel এ পাঠানো হয়, আর এটি নির্ভর করে অ্যাপ্লিকেশনটিতে প্রবেশ করা অনুরোধের ধরণের উপর । এই দুটি kernel কেন্দ্রীয় অবস্থান (central location) হিসাবে কাজ করে যেখানে সমস্ত অনুরোধ যায় । আপাতত, আসুন শুধু HTTP কার্নেলের উপর ফোকাস করি, যা app/Http/Kernel.php-এ অবস্থিত।

HTTP কার্নেল Illuminate\Foundation\Http\Kernel class কে extend করে, যা bootstrapper গুলিকে একটি array তে ডিফাইন করে যা request টি execute করার আগে রান হবে। এই bootstrapper গুলি error handling, logging এবং application environment শনাক্ত করে সাথে অন্য কাজগুলিও সম্পাদন করে, যা আসলে request টি handle করার আগে দরকার হয়। সাধারণত, এই class গুলো internal Laravel configuration এর কাজ করে যা আপনার চিন্তা করার দরকার নেই।

HTTP kernel HTTP middleware এর একটি তালিকাও ডিফাইন করে, যা যেকোনো অ্যাপ্লিকেশন রান করার আগে reequest কে অবশ্যই সেই HTTP middleware গুলোকে পাস করতে হয়। এই middleware গুলি HTTP session এর reading এবং writing কাজ গুলোও করে, অ্যাপ্লিকেশনটি maintenance mode এ আছে কিনা তা নির্ধারণ করা, CSRF টোকেন যাচাই সহ আরও অনেক কিছু করে।

HTTP kernel’s handle method এর method signature টি বেশ সহজ: এটি একটি request গ্রহণ করে এবং একটি Response রিটার্ন করে। ধরুন কার্নেলটি একটি বড় ব্ল্যাক বক্স যা আপনার সম্পূর্ণ অ্যাপ্লিকেশনটিকে উপস্থাপন করে। এটি HTTP request গুলোকে খাবার দেয় এবং এর response রিটার্ন করে।

Laravel Mastering Course

3. Service Providers

সবচেয়ে গুরুত্বপূর্ণ kernel bootstrapping action গুলির মধ্যে একটি হল আপনার অ্যাপ্লিকেশনের জন্য service provider গুলো লোড করা। service provider গুলো ফ্রেমওয়ার্কের বিভিন্ন components, যেমন database, queue, validation এবং routing components গুলির সমস্ত bootstrap করার জন্য দায়িত্বে থাকে৷ অ্যাপ্লিকেশনটির জন্য সব service provider গুলো config/app.php তে configuration file’s providers অ্যারেতে কনফিগার করা হয়েছে।

Laravel এই provider লিস্ট গুলোর মধ্যে প্রত্যেকের একটা করে ইনস্ট্যান্ট করবে । প্রোভাইডারদের ইনস্ট্যান্ট করার পরে, register method সমস্ত provider দের call করবে। তারপর, একবার সমস্ত provider গুলো register হয়ে গেলে, তখন boot method প্রতিটি provider কে call করবে । তাই service provider রা তাদের boot method execute করার সময় প্রতিটি container binding উপর নির্ভর করতে পারে।

মূলত: Laravel দ্বারা অফার করা প্রতিটি প্রধান ফীচার একটি service provider দ্বারা বুটস্ট্র্যাপ করা এবং কনফিগার করা হয়। যেহেতু তারা ফ্রেমওয়ার্ক দ্বারা অফার করা অনেকগুলি ফীচার বুটস্ট্র্যাপ এবং কনফিগার করে, তাই service provider রা সম্পূর্ণ লারাভেল বুটস্ট্র্যাপ প্রক্রিয়ার সবচেয়ে গুরুত্বপূর্ণ দিক।

4. Routing

Laravel দিয়ে তৈরি application এর সবচেয়ে গুরুত্বপূর্ণ service provider দের মধ্যে একটি হল App\Providers\RouteServiceProvider। এই service provider আপনার অ্যাপ্লিকেশনের রুট ডিরেক্টরির মধ্যে থাকা রুট ফাইলগুলি লোড করে৷ আরেকটু ভালোভাবে বুঝার আপনি RouteServiceProvider কোডটি খুলুন এবং এটি কীভাবে কাজ করে তা একবার দেখতে পারেন।

Application টি একবার বুটস্ট্র্যাপ হয়ে গেলে এবং সব service provider register হয়ে গেলে, তখন Request টি পাঠানোর জন্য router এর কাছে হস্তান্তর করা হবে। রাউটার একটি রুট বা controller এর কাছে request টি প্রেরণ করবে, সেইসাথে যেকোন route কর্তৃক নির্দিষ্ট middleware রান করবে।

Middleware আপনার অ্যাপ্লিকেশনে প্রবেশ করা HTTP request গুলি ফিল্টারিং বা পরীক্ষা করার জন্য একটি সুবিধাজনক প্রক্রিয়া প্রদান করে। উদাহরণস্বরূপ, লারাভেল একটি Middleware অন্তর্ভুক্ত করে যা যাচাই করে যে আপনার অ্যাপ্লিকেশনটির ব্যবহারকারী verified বা authenticate কিনা। ব্যবহারকারী authenticate না হলে, Middleware ব্যবহারকারীকে login স্ক্রিনে redirect করবে। যাইহোক, যদি ব্যবহারকারী authenticate হয়, Middleware request টিকে application টিতে পরবর্তী স্টেপ এ যাওয়ার অনুমতি দেবে। কিছু Middleware অ্যাপ্লিকেশনের মধ্যে সমস্ত রুটে বরাদ্দ করা হয়, যেমন আপনার HTTP কার্নেলের $middleware property সংজ্ঞায়িত করা হয়েছে, যখন কিছু শুধুমাত্র নির্দিষ্ট রুট বা রুট গ্রুপগুলিতে বরাদ্দ করা হয়। আপনি সম্পূর্ণ Middleware article পড়ে Middleware সম্পর্কে আরও জানতে পারেন।

যদি request টি route এ এসাইন কৃত সবগুলো middleware check এর মধ্যে দিয়ে পার হতে পারে, তাহলে route বা controller method execute করা হবে এবং route বা controller method দ্বারা response return রুটের মিডলওয়্যারের চেইনের মাধ্যমে ফেরত পাঠানো হবে।

5. Finishing Up

এই জায়গায় একবার route বা controller method একটি response return করে, আবার response টি route এর middleware এর মাধ্যমে response টি outgoing হবে এবং অ্যাপ্লিকেশনটিকে outgoing response সংশোধন বা পরীক্ষা করার সুযোগ দেবে।

ফাইনালি, একবার response মিডলওয়্যারের মাধ্যমে ফিরে গেলে, HTTP kernel এর handle method আপনাকে response object রিটার্ন করে এবং index.php ফাইল রিটার্ন করা রেসপন্সে send method কে কল করে। send method ব্যবহারকারীর ওয়েব ব্রাউজারে response content পাঠায়।

6. Focus On Service Providers

একটি Laravel অ্যাপ্লিকেশন বুটস্ট্র্যাপ করার জন্য Service provider গুলো সত্যিই মূল চাবিকাঠি। অ্যাপ্লিকেশন instance তৈরি হয় যখন service provider গুলো registered হয়, এবং যখন request টি বুটস্ট্র্যাপড অ্যাপ্লিকেশনের কাছে হস্তান্তর করা হয়। এটা সত্যিই যে সহজ হয়ে যায় !

কিভাবে একটি Laravel অ্যাপ্লিকেশন তৈরি করা হয় এবং service provider গুলোর মাধ্যমে বুটস্ট্র্যাপ করা হয় তা দৃঢ়ভাবে বুঝা খুবই প্রয়োজন। আপনার অ্যাপ্লিকেশনের ডিফল্ট service provider গুলো app/Providers ডিরেক্টরিতে থেকে দেখতে পারেন ।

বাই ডিফল্ট , AppServiceProvider গুলো মোটামুটি খালি থাকে। এই provider টি আপনার অ্যাপ্লিকেশনের নিজস্ব bootstrapping এবং service container এর মধ্যে বাইন্ডিং করার জন্য একটি দুর্দান্ত জায়গা। বড় অ্যাপ্লিকেশনের জন্য, আপনি আপনার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত নির্দিষ্ট service provider গুলির জন্য আরও ছোট ছোট bootstrapping সহ একাধিক service provider তৈরি করতে চাইতে পারেন।

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৯ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। ভাবে বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০এরও অধিক ছাত্র । বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance এবং Mastering DevOps Engineering কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply