স্বাগতম সবাইকে আজকের লেখায়। বেশ কিছুদিন পরে লিখতে বসেছি। আজকের লেখাটি অবশ্য কয়েকজনের অনুরোধে লেখা। অনেকদিন ধরেই লিখবো লিখবো করে লেখা হচ্ছে না তাই আজকে এক প্রকার জোর করেই বসলাম। বর্তমানে লারাভেল পিএইচপি ফ্রেমওয়ার্কের একটা হুজুগ বা জোয়াড় চলছে, আর আমাদের তো আবার জোয়ারে গা না ভাসালেই নয়। ডেসটিনি আর ফ্রীল্যান্সিং এর হুজুগের মতো এবার আমরা লারাভেলকেও পেয়ে বসেছি। পিএইচপি জানি বা না জানি লারাভেল কিন্তু আমাকে শিখতেই হবে। আর আজকের লেখাটা এ হুজুগটাকে একটু কমানোর জন্য সাথে যারা সত্যিকারেরই লারাভেল শিখতে চান কিন্তু কিভাবে শুরু করবেন বুঝতেছেন না তাদের জন্যও।
তো এবার একটু জেনে নেই লারাভেল ফ্রেমওয়ার্ক কি? লারাভেল তুলনামূলক পিএইচপি'র নতুন ফ্রেমওয়ার্ক কিন্তু বর্তমানে এটির জনপ্রিয়তা তুঙ্গে। বড় বড় সফটওয়্যার ফার্মগুলোও তাদের ওয়েব অ্যাপ্লিকেশন ডেভলপের জন্য লারাভেলকে বেছে নিচ্ছে। লারাভেল ব্যবহার তুলনামূলক সহজ, এর রয়েছে নান্দনীক কোডিং স্টাইল, স্ট্রং কমিউনিটি রয়েছে লারাভেলের আর সব থেকে বড় কথা লারাভেলে সবকিছুই প্রায় Out of the box কাজ করা যায়। লারাভেল সম্পর্কে আরো বিস্তারিত জানতে আমার Installing and Configuring Laravel 5.1 [Bangla] লেখাটি পড়তে পারেন।
যাই হোক জ্ঞান অনেক দেয়া হয়েছে এবার কাজে কথায় আসি, আপনি হয়তোবা বেশ কিছুদিন যাবতই ভাবছেন লারাভেলটা শেখা শুরু করা প্রয়োজন কিন্তু শুরুটা কিভাবে করবেন বা আপনার লারাভেল শুরু করার জন্য পর্যাপ্ত দক্ষতা আছে কিনা সেটা বুঝতে পারছেন না, যদি আপনার অবস্থা এরকমই হয় তবে আপনার জন্যই আজকের এ লেখা। তাহলে চলুন জেনে নেই লারাভেল শুরুর পূর্বে আপনাকে যেসব বিষয়ে জানতে হবে তার কিছু নমুনা:
ভালো টাইপিং কথাটি শুনেই হয়তোবা হেসেই উড়িয়ে দিবেন, কিন্তু এটা সত্যি যে আপনাকে একজন ভালো প্রোগ্রামার হতে হলে ভালো টাইপিং এর বিকল্প নাই। ভালো টাইপিং না জানলে যে লারাভেল শিখতে পারবেন না তা নয় তবে জানলে অনেকের থেকে এগিয়ে থাকবেন। তার থেকেও বড় কথা হচ্ছে ভালো টাইপিং জানা মানে তার প্রোগ্রামিং শিখতে সময়টা কম লাগে। কারন একটি কোড যদি আপনি বোঝার পরে সেটিকে নিজে টাইপ করে এক্সিকিউট করান তবে এতে শেখার ও বোঝার ক্ষমতাটি বেশি থাকে। আমি এমন অনেককে দেখেছি যার প্রোগ্রামিং এ জ্ঞান খারাপ না কিন্তু নিজে সরাসরি কোড না করায় প্রোগ্রামিং জগতটা থেকে সে অকালেই ঝরে পরেছে। আর তার থেকেও বড় বিষয় হচ্ছে আপনি টাইপ জানলে প্রোগ্রামিং করে জীবিকা নির্বাহ করতে না পারলেও হতাশ হবার কোনো কারন নেই, নীলক্ষেতে কোনো দোকানে টাইপিং এর কাজ করেও মাসে ১৫ হাজার টাকা ইনকাম করতে পারবেন ইনশা'আল্লাহ :D ।
এটি ভাবার কোনো কারন নেই যে লারাভেল একটি ল্যাংগুয়েজ। যেহেতু লারাভেল পিএইচপি প্রোগ্রামিং ল্যাংগুয়েজ দিয়ে ডেভলপ করা তাই এর সমস্থ ফাংশনালিটিজই পিএইচপি'র। পিএইচপি ছাড়া লারাভেল কল্পনাই করা যায় না অবশ্য যাবার কথাও না কারন লারাভেলে সমস্থটাই পিএইচপির কোড তাই লারাভেল শেখার পূর্বে আপনাকে পিএইচপি সম্পর্কে ভালো দখল থাকতে হবে। তাহলে দেখে নেই পিএইচপির কি কি বিষয়ে আপনাকে জানতে হবে।
এটি শুধু লারাভেলের জন্য নয় বরং প্রোগ্রামিং এ প্রোফেশনাল হতে হলে এ্যারে সম্পর্কে অগাধ পান্ডিত্য থাকতে হবে। এ্যারে সম্পর্কে বিস্তারিত জানতে Introduce with PHP array [Bangla] এই লেখাটি পড়তে পারেন।
লারাভেলে বহুল ব্যবহৃত একটি নাম হলো Anonymous Function. এটি লারাভেলে প্রতিটি পদে পদে ব্যবহৃত হয়। বলতে গেলে Anonymous Function ব্যতিত লারাভেলকে কল্পনাই করা যায়। Anonymous Function সম্পর্কে বিস্তারিত এখানে পাবেন। আমরা লারাভেলে ব্যবহৃত একটি Anonymous Function এর উদাহরন দেখিঃ
https://gist.github.com/fcef4e0e4390e2419691349464926aa3
এখানে Route::get()
method এর দ্বিতীয় প্যারামিটারটি হলো Anonymous Function/Closure/Callback function.
লারাভেল তাদের Facade এ সবকিছুই প্রায় Statically রিপ্রেসেন্ট করে। লারাভেলের কোর ফাংশনালিটিজের সকল কিছুই স্টেটিক ভাবে ব্যবহারের সুযোগ আছে। মূলত লারাভেলের কোডের মূল সৌন্দর্য্যই হলো স্টেটিক ওয়েতে মেথড ও প্রপার্টিজ গুলো ব্যবহার করা। তাই আপনাকে পিএইচপির স্টেটিক মেথড ও প্রোপার্টিজ সম্পর্কে ভালো একটি ধারনা প্রয়োজন। এখান থেকে PHP Static Method and Properties এর ধারনা নিতে পারবেন। নিচে লারাভেলে ব্যবহৃত স্টেটিক মেথডের একটি উদাহরন দেয়া হলোঃ
https://gist.github.com/8df1513e1f2a0c601275d52afc554636
এখানে get()
ও make()
দুটি স্টেটিক মেথড যথাক্রমে Route
ও View
ক্লাসের(যদিও লারাভেল মেথড স্টেটিক্যাল লেখে না)।
আধুনিক ফ্রেমওয়ার্কগুলোতে ব্যবহৃত পিএইচপি’র সবচেয়ে জনপ্রিয় ফিচার হলো namespace
। Namespace ছাড়া লারাভেল ভাবাটাই অস্বাভাবিক। Namespace হলো ফাইলের ভার্চুয়াল পাথ। আপনি চাইলে প্রতিটি ফাইলের একটা কাল্পনিক পাথ ডিফাইন করে দিতে পারেন। নিচে namespace লেখার নিয়ম দেয়া হলোঃ
https://gist.github.com/841f723ca095cf62efe143234499d6fb
Namespace মূলত namespace
কিওয়ার্ড দিয়ে লিখতে হয়। আর এটি পিএইচপি কোডের একেবার উপরে লিখতে হয়। Namespace এর ব্যবহারঃ
https://gist.github.com/ed9cfa02207e8bed9c12a633d5bc2147
মূলত লারাভেল লেটেস্ট পিএইচপি’র প্রায় সকল ফিচারই ব্যবহার করে। আর পিএইচপি’র লেটেস্ট ফিচারের মধ্যে traits অন্যতম। পিএইপিতে মূলত multiple inheritance এর সুযোগ ছিলো না, আর এই সুবিধাটিই মূলত traits প্রদান করে। Traits এর ব্যবহার লারাভেলে প্রচুর। তাই লারাভেল শেখার পূর্বে এটি জানাও আবশ্যক। নিচে traits লেখার একটা উদাহরন দেয়া হলো বোঝার সুবিধার জন্য
Traits ও মূলত একধরনের ক্লাস, এটিও ক্লাসের নিয়মেই লেখা হয় শুধু class
কিওয়ার্ডের পরিবর্তে trait
দিয়ে লিখতে হয় নিচের মতোঃ
https://gist.github.com/5545c6729fa087f8c425c182d7f94d2e
এটিও ফ্রেমওয়ার্কের বহুল ব্যবহৃত একটি পিএইচপির ফিচার। এখান থেকে inheritance সম্পর্কে জেনে নিন। উদাহরনঃ
https://gist.github.com/48f3a96afd6a4898cdb8f42848f39612
এখানে BaseClass
কে inherit করে UserClass
তৈরী করা হয়েছে।
ডিজাইন প্যাটার্ন আসলে কোনো কোড নয় বা এটি নির্দিষ্ট কোনো ল্যাংগুয়েজের অংশ নয়, ডিজাইন প্যাটার্ন হলো একটি পদ্ধতি যেখানে আপনি কিভাবে কোড করবেন তা বর্ননা করা হয়। ডিজাইন প্যাটার্ন মূলত ডেভলপমেন্ট প্রোসেসকে সহজ করে ও এর গতি বৃদ্ধি করে। সফটওয়্যার ডেভলপমেন্টে একাধিক ডিজাইন প্যাটার্ন ব্যবহৃত হতে পারে। ডিজাইন প্যাটার্ন সম্পর্কে জানতে এই লেখা টি পড়তে পারেন।
পিএইচপিতে ব্যবহৃত জনপ্রিয় কিছু ডিজাইন প্যাটার্ন সম্পর্কে এখান থেকে জানতে পারবেন।
লারাভেলের জন্য 1. Dependency Injection 2. Inversion of Control 3. Facades 4. Factory 5. Singleton Design Pattern গুলো জানা খুব জরুরী।
প্রায় সবগুলো লাংগুয়েজের জন্যই আলাদা আলাদা ডিপেন্ডেন্সি ম্যানেজার আছে, পিএইচপি’র জন্য এরককম একটি জনপ্রিয় ডিপেন্ডেন্সি ম্যানেজার হলো composer। এটি মূলত পিএইচপি প্রোজেক্টে ব্যবহৃত সকল ডিপেন্ডেন্সি প্যাকেজ বা লাইব্রেরী গুলোকে হ্যান্ডল করে থাকে। Composer সম্পর্কে জানতে আমার Composer Installation [Bangla] লেখাটি পড়তে পারেন। লারাভেলে কম্পোজার ব্যবহারের বিকল্প নেই, লারাভেলের সকল প্যাকেজ এবং এর জন্য ডেভলপকৃত সকল থার্ডপার্টি প্যাকেজগুলোও হ্যান্ডল করা হয় এই কম্পোজারের মাধ্যমে।
লারাভেলে খুব সহজেই অনেক কাজ করার জন্য লারাভেল তাদের নিজস্ব কমান্ড লাইন ব্যবহার করে যেটিকে Artisan
বলে। এখানে অনেক জটিল কাজ খুব সহজেই করা যায়, যেমনঃ Controller Creation, Request Creation, Migration, Jobs ইত্যাদি। তাই ভালো হয় লারাভেল শেখার পূর্বে এটিকেও একটু ঝালাই করে নেয়া।
সাধারন অ্যাপ্লিকেশন ডেভলপের জন্য লারাভেলে হয়তো ডাটাবেস সম্পর্কে ভালো ধারনা থাকলেও চলবে কিন্তু আপনি যদি লারাভেলে এ্যাডভান্স কোয়েরী করতে চান তবে ডাটাবেস কোয়েরী সম্পর্কে ভালো একটা ধারনা থাকা প্রয়োজন।
যেহেতু লারাভেলে ওয়েব অ্যাপ্লিকেশন ডেভলপ করবেন তাই আপনাকে HTTP Request সম্পর্কে একটু ধারনা থাকা প্রয়োজন। লারাভেল Route নিয়ে কাজ করার সময় আপনি এর প্রয়োজনিয়তা অনুভব করবেন। HTTP Request সম্পর্কে ভালো ধারনা থাকলে আপনার অ্যাপ্লিকেশনটি হবে খুব ইফেক্টিভ। এ সম্পর্কে বিস্তারিত এই লেখাটি থেকে পাবেন।
লারাভেল তার প্রতিটি রেসপন্সই HTTP স্টান্ডার্ড মেনে দেয়। কখন কোন রেসপন্স হবে এর কোড কি হবে এটি জানা খুবই প্রয়োজন বিশেষ করে restAPI এর জন্য। রেসপন্স সম্পর্কে এখান থেকে ধারনা পাববেন আর রেসপন্স কোড সম্পর্কে জানতে পারবেন এখান থেকে।
Coding Standard কোডের কোনো অংশ নয়। কিন্তু এটি কোডকে হিউম্যান রিড্যাবল করে ও টিমওয়াইজ করতে সুবিধা প্রদান করে এবং এতে কোড একটি ইন্টারন্যাশনাল স্টান্ডার্ড ফলো করে যাতে বিশ্বের যেকোন প্রোগ্রামার চাইলেই আপনার কোডে কন্ট্রিবিউট করতে পারে। লারাভেল তাদের ফ্রেমওয়ার্কে PSR-2 কোডিং স্টান্ডার্ড ব্যবহার করেছে যেটি বর্তমানে পিএইচপি’র সবথেকে জনপ্রিয় ও স্বীকৃত স্টান্ডার্ড। তাই এটি সম্পর্কেও আপনাকে বিষদ ধারনা থাকা প্রয়োজন।
এবং সর্বশেষে আপনাকে JSON data সম্পর্কে ধারনা থাকতে হবে। লারাভেল মূলত restAPI এর জন্য বিশেষভাবে ডিজাইন করা তাই লারাভেল তার সমস্থ কালেক্টিভ ডাটাকে JSON এ রিটার্ন করে বা আউটপুট দেয়। এখান থেকে JSON সম্পর্কে জানতে পারবেন। আর পিএইচপি’র JSON ফাংশন সম্পর্কে জানতে পারবেন এখান থেকে।
পরিশেষে বলবো অপারেটিং সিস্টেম হিসেবে *nix ভিত্তিক কোনো OS ব্যবহার করতে বিশেষ করে Ubuntu, Debian, Elementary আর অবশ্যই সিস্টেমে LAMP/LEMP স্টাক করে চালাবেন এতে রিয়েল সার্ভার ফ্লেভার পাবেন।
তো এই ছিলো আজকের আলোচনা, আশা করছি এবার লারাভেল সঠিক পথে ও সাহস নিয়ে শুরু করতে পারবেন ইনশা’আল্লাহ। আমার লেখা বা জানায় হয়তোবা অনেক ভূল ত্রুটি থাকতে পারে। আপনাদের চোখে কোন ভূল ধরা পরলে অবশ্য আমাকে জানাতে ভুলবেন না।
ধন্যবাদ সবাইকে :)
thanks