Laravel শুরুর পূর্বে

--

কিছুদিন আগে অফিসে একজনের ইন্টারভিউতে জিজ্ঞেস করেছিলাম Trait কি?
তার উত্তর ছিলো “Trait তো লারাভেলের একটি ফিচার, এটি লারাভেলে ইউজ হয়” 😳

বোঝা গেলো ব্যাপারটা? Trait নাকি লারাভেলের ফিচার!
হ্যা, ঠিক এরকমেরই হাজারো লারাভেল ডেভদের বিশ্বাস যে Trait, Namespace, Anonymous Function, Static Method এগুলো লারাভেলের ফিচার। বিশ্বাস করবেই বা না কেন? এর আগে তাদের দুনিয়াতে এগুলো ব্যবহার হয়নি। তারা নিজেরাও এগুলো শিখেনি, ফলে যখন এগুলোর ব্যবহার লারাভেলে এসে দেখছে তখন লারাভেলের অন্য সকল চমৎকার ফিচারের মতো পিএইচপি’র কোর ফিচারগুলোকেও লারাভেল ফিচার মনে করছে।

তাই আজকের লেখা লারাভেল শুরুর পূর্বে কিকি বিষয়ে জেনে নেয়া জরুরী সেসকল বিষয়গুলো নিয়ে। এতে করে লারাভেল শিখতে যেমন সহজ হবে তেমনি কোনটা কিসের ফিচার সেগুলোও জানা হবে।

Laravel PHP Framework নামটি শোনেননি এমন ডেভলপার খুব কমই পাওয়া যাবে, আর এর অনন্য ফিচারগুলোর জন্য বর্তমানে এর জনপ্রিয়তা হুহু করে বাড়ছে। অনেকেই এটিকে নিজের প্রোজেক্টে ব্যবহারের চিন্তা করছে। আর এজন্য শিখতে হচ্ছে লারাভেল। তো চলুন জেনে নেই লারাভেল কি, আর এটি কিভাবে শুরু করা যায় অথবা এটি শুরু করতে হলে আমাকে কি কি বিষয়ে জানতে হবে:

লারাভেল ফ্রেমওয়ার্ক কি?
লারাভেল তুলনামূলক পিএইচপি’র নতুন ফ্রেমওয়ার্ক কিন্তু বর্তমানে এটির জনপ্রিয়তা তুঙ্গে। বড় বড় সফটওয়্যার ফার্মগুলোও তাদের ওয়েব অ্যাপ্লিকেশন ডেভলপের জন্য লারাভেলকে বেছে নিচ্ছে। লারাভেল ব্যবহার তুলনামূলক সহজ, এর রয়েছে নান্দনীক কোডিং স্টাইল, স্ট্রং কমিউনিটি রয়েছে লারাভেলের, আর সব থেকে বড় কথা লারাভেলে সবকিছুই প্রায় Out of the box কাজ করা যায়, আরও মজার ব্যাপার লারাভেলে কাজ করলে আপনার সারাজীবনের পিএইচপির ধারনাই পালটে যাবে। লারাভেল সবসময় আপ-টু-ডেট থাকে, সাথে লারাভেল সবসময় পিএইচপি’র লেটেস্ট ভার্সন ব্যবহার করে ফলে আপনি না চাইলেও পিএইচপি নতুন নতুন ফিচার ব্যবহারের সুযোগ পাবেন।

যাই হোক জ্ঞান তো অনেক দেয়া হলো এবার কাজে কথায় আসা যাক, আপনি হয়তোবা বেশ কিছুদিন যাবতই ভাবছেন লারাভেলটা শেখা শুরু করা প্রয়‌োজন কিন্তু শুরুটা কিভাবে করবেন বা আপনার লারাভেল শুরু করার জন্য পর্যাপ্ত দক্ষতা আছে কিনা সেটা বুঝতে পারছেন না, যদি আপনার অবস্থা এরকমই হয় তবে আপনার জন্যই আজকের এ লেখা। তো চলুন জেনে নেই লারাভেল শুরুর পূর্বে আপনাকে যেসব বিষয়ে জানতে হবে তার কিছু নমুনা:

১। ভালো টাইপিং

ভালো টাইপিং কথাটি শুনেই হয়তোবা হেসেই উড়িয়ে দিবেন, কিন্তু এটা সত্যি যে আপনাকে একজন ভালো প্রোগ্রামার হতে হলে ভালো টাইপিং এর বিকল্প নাই। ভালো টাইপিং না জানলে যে লারাভেল শিখতে পারবেন না তা নয় তবে জানলে অনেকের থেকে এগিয়ে থাকবেন। তার থেকেও বড় কথা হচ্ছে ভালো টাইপিং জানা মানে তার প্রোগ্রামিং শিখতে সময়টা কম লাগে। কারন একটি কোড যদি আপনি বোঝার পরে সেটিকে নিজে টাইপ করে এক্সিকিউট করান তবে এতে শেখার ও বোঝার ক্ষমতাটি বেশি থাকে। আমি এমন অনেককে দেখেছি যার প্রোগ্রামিং এ জ্ঞান খারাপ না কিন্তু নিজে সরাসরি কোড না করায় প্রোগ্রামিং জগতটা থেকে সে অকালেই ঝরে পরেছে। আর তার থেকেও বড় বিষয় হচ্ছে আপনি টাইপ জানলে প্রোগ্রামিং করে জীবিকা নির্বাহ করতে না পারলেও হতাশ হবার কোনো কারন নেই, নীলক্ষেতে কোনো দোকানে টাইপিং এর কাজ করেও মাসে ১৫ হাজার টাকা ইনকাম করতে পারবেন ইনশা’আল্লাহ :D ।

২। পিএইচপি ল্যাংগুয়েজ কোর ফিচার

এটি ভাবার কোনো কারন নেই যে লারাভেল একটি ল্যাংগুয়েজ। যেহেতু লারাভেল পিএইচপি প্রোগ্রামিং ল্যাংগুয়েজ দিয়ে ডেভলপ করা তাই এর সমস্থ ফাংশনালিটিজই পিএইচপি’র। পিএইচপি ছাড়া লারাভেল কল্পনাই করা যায় না অবশ্য যাবার কথাও না কারন লারাভেলে সমস্থটাই পিএইচপির কোড তাই লারাভেল শেখার পূর্বে আপনাকে পিএইচপি সম্পর্কে ভালো দখল থাকতে হবে। জানতে হবে পিএইচপির কোর ফিচারগুলো সম্পর্কে। তাহলে দেখে নেই পিএইচপির কি কি বিষয়ে আপনাকে জানতে হবে লারাভেলকে ভালো ভাবে শিখতে হলে:

Array

এটি শুধু লারাভেলের জন্য নয় বরং প্রোগ্রামিং এ প্রোফেশনাল হতে হলে এ্যারে সম্পর্কে অগাধ পান্ডিত্য থাকতে হবে। এ্যারে সম্পর্কে বিস্তারিত জানতে হলে আমার Introduce with PHP array [Bangla] এই লেখাটি পড়তে পারেন।

Anonymous Function/Closure

লারাভেলে বহুল ব্যবহৃত একটি নাম হলো Anonymous Function. এটি লারাভেলে প্রতিটি পদে পদে ব্যবহৃত হয়। বলতে গেলে Anonymous Function ব্যতিত লারাভেলকে কল্পনাই করা যায়। Anonymous Function সম্পর্কে বিস্তারিত এখানে পাবেন। এটি লারাভেলকে করেছে আরো নান্দনিক, আমারা লারাভেলে ব্যবহৃত একটি Anonymous Function এর ব্যবহার দেখিঃ

এখানে Route::get() method এর দ্বিতীয় প্যারামিটারটি হলো Anonymous Function/Closure/Callback function.

Static Methods and Properties

লারাভেল তাদের Facade এ সবকিছুই প্রায় Statically রিপ্রেসেন্ট করে। লারাভেলের কোর ফাংশনালিটিজের সকল কিছুই স্টেটিক ভাবে ব্যবহারের সুযোগ আছে। মূলত লারাভেলের কোডের মূল সৌন্দর্য্যই হলো স্টেটিক ওয়েতে মেথড ও প্রপার্টিজ গুলো ব্যবহার করা। তাই‍ আপনাকে পিএইচপির স্টেটিক মেথড ও প্রোপার্টিজ সম্পর্কে ভালো একটি ধারনা থাকা প্রয়োজন। এখান থেকে PHP Static Method and Properties এর ধারনা নিতে পারবেন। নিচে লারাভেলে ব্যবহৃত স্টেটিক মেথডের একটি উদাহরন দেয়া হলোঃ

এখানে get()make() দুটি স্টেটিক মেথডের মতো করে ব্যাবহার করা হয়েছে RouteView ক্লাসে(যদিও লারাভেল মেথড স্টেটিক্যাললি লেখে না)।

Namespace

আধুনিক ফ্রেমওয়ার্কগুলোতে ব্যবহৃত পিএইচপি’র সবচেয়ে জনপ্রিয় ফিচার হলো namespaceNamespace ছাড়া লারাভেল ভাবাটাই অস্বাভাবিক। Namespace হলো ফাইলের ভার্চুয়াল পাথ। আপনি চাইলে প্রতিটি ফাইলের একটা কাল্পনিক পাথ ডিফাইন করে দিতে পারেন। নিচে namespace লেখার নিয়ম দেয়া হলোঃ

Namespace মূলত namespace কিওয়ার্ড দিয়ে লিখতে হয়। আর এটি পিএইচপি কোডের একেবার উপরে লিখতে হয়। Namespace এর ব্যবহারঃ

Namespace এর ফলেই আপনি লারাভেলে এর কোর প্যাকেজ অথবা থার্ডপার্টি প্যাকেজগুলোকে এতো ইলিগ্যান্ট ওয়েতে ব্যবহার করতে পারছেন। লারাভেলে কাজ করার জন্য এটি জানা খুবই গুরুত্বপূর্ন।

Traits

মূলত লারাভেল লেটেস্ট পিএইচপি’র প্রায় সকল ফিচারই ব্যবহার করে। আর পিএইচপি’র লেটেস্ট ফিচারের মধ্যে traits অন্যতম। পিএইপিতে মূলত multiple inheritance এর সুযোগ ছিলো না, আর এই সুবিধাটিই মূলত trait প্রদান করে। Trait কে আপনি কোড মিক্সিনও বলতে পারেন। Trait এর ব্যবহার লারাভেলে প্রচুর। তাই লারাভেল শেখার পূর্বে এটি জানাও আবশ্যক। নিচে trait লেখার একটা উদাহরন দেয়া হলো বোঝার সুবিধার জন্য, Trait ও মূলত একধরনের ক্লাস, এটিও ক্লাসের নিয়মেই লেখা হয় শুধু class কিওয়ার্ডের পরিবর্তে trait দিয়ে লিখতে হয় নিচের মতোঃ

Inheritance

এটিও ফ্রেমওয়ার্কের বহুল ব্যবহৃত একটি পিএইচপি কোর ফিচার। এখান থেকে inheritance সম্পর্কে জেনে নিন। উদাহরনঃ

এখানে BaseClass কে inherit করে UserClass তৈরী করা হয়েছে।

Interface & Abstraction

এটিকে লারাভেল ফ্রেমওয়ার্কের প্রান বলতে পারেন। ইন্টারফেস ও এব্সট্রাকশন এগুলো লারাভেল ফিচার নয়। এগুলো পিএইচপি’র ওওপি ফিচার। কিন্তু লারাভেলে এগুলোকে স্ট্রংলি ব্যবহার হয়েছে। লারাভেলে এতেসুন্দর কনফিগারেশন সিস্টেমের পিছনে ইন্টারফেস জড়িত, আপনি চাইলেই যে MySQL ড্রাইভার থেকে MSSQL এ সুইচ করতে পারছেন এটিও ইন্টারফেসের অবদান। তাই আপনার ইন্টারফেস ও এব্সট্রাকশন সম্পর্কে বিস্তর জ্ঞান থাকা আবশ্যক।

৩। Design Pattern

ডিজাইন প্যাটার্ন আসলে কোনো কোড নয় বা এটি নির্দিষ্ট কোনো ল্যাংগুয়েজের অংশ নয়, ডিজাইন প্যাটার্ন হলো একটি পদ্ধতি যেখানে আপনি কিভাবে কোড করবেন তা বর্ননা করা হয়। ডিজাইন প্যাটার্ন মূলত ডেভলপমেন্ট প্রোসেসকে সহজ করে ও এর গতি বৃদ্ধি করে। সফটওয়্যার ডেভলপমেন্টে একাধিক ডিজাইন প্যাটার্ন ব্যবহৃত হতে পারে। ডিজাইন প্যাটার্ন সম্পর্কে জানতে এই লেখা টি পড়তে পারেন।

পিএইচপিতে ব্যবহৃত জনপ্রিয় কিছু ডিজাইন প্যাটার্ন সম্পর্কে এখান থেকে জানতে পারবেন।

লারাভেলের বহুল ব্যবহৃত ডিজাইন প্যাটার্নসমূহ: 1. Dependency Injection 2. Inversion of Control 3. Facades 4. Factory 5. Singleton Design Pattern 6. Proxy Pattern 7. Model View Controller (MVC)

সময়করে এগুলোও জেনে নিতে পারেন।

৪। Composer — Dependency Manager

প্রায় সবগুলো লাংগুয়েজের জন্যই আলাদা আলাদা ডিপেন্ডেন্সি ম্যানেজার আছে, পিএইচপি’র জন্য এরককম একটি জনপ্রিয় ডিপেন্ডেন্সি ম্যানেজার হলো composer। এটি মূলত পিএইচপি প্রোজেক্টে ব্যবহৃত সকল ডিপেন্ডেন্সি প্যাকেজ বা লাইব্রেরী গুলোকে হ্যান্ডল করে থাকে। সাথে প্রোজেক্টে অটোলোডার হিসেবেও কাজ করে। Composer সম্পর্কে জানতে আমার Composer Installation [Bangla] লেখাটি পড়তে পারেন। লারাভেলে কম্পোজার ব্যবহারের বিকল্প নেই, লারাভেলের সকল প্যাকেজ এবং এর জন্য ডেভলপকৃত সকল থার্ডপার্টি প্যাকেজগুলোও হ্যান্ডল করা হয় এই কম্পোজারের মাধ্যমে।

৫। Command Line Interface (CLI)

লারাভেলে খুব সহজেই অনেক কাজ করার জন্য লারাভেল তাদের নিজস্ব কমান্ড লাইন সিস্টেম নিয়ে এসেছ, এটিকেArtisan বলে। এখানে অনেক জটিল কাজ খুব সহজেই করা যায়, যেমনঃ Controller Creation, Request Creation, Migration, Jobs ইত্যাদি। তাই ভালো হয় লারাভেল শেখার পূর্বে CLI নিয়ে একটু জেনে নেয়া।

৬। Database

সাধারন অ্যাপ্লিকেশন ডেভলপের জন্য লারাভেলে হয়তো ডাটাবেস সম্পর্কে খুব ভালো ধারনা না থাকলেও চলবে কিন্তু আপনি যদি লারাভেলে এ্যাডভান্স কোয়েরী করতে চান তবে ডাটাবেস কোয়েরী সম্পর্কে ভালো একটা ধারনা থাকা প্রয়োজন।

৭। HTTP Request & Response

যেহেতু লারাভেলে ওয়েব অ্যাপ্লিকেশন ডেভলপ করবেন তাই আপনাকে HTTP Request সম্পর্কে একটু ধারনা থাকা প্রয়োজন। লারাভেল Route নিয়ে কাজ করার সময় আপনি এর প্রয়োজনিয়তা অনুভব করবেন। এছারাও জানা থাকা দরকার HTTP Verb ও HTTP Response Code সম্পর্কে জানা। HTTP Request সম্পর্কে ভালো ধারনা থাকলে আপনার অ্যাপ্লিকেশনটি হবে খুব ইফেক্টিভ। এ সম্পর্কে বিস্তারিত এই লেখাটি থেকে পাবেন।

লারাভেল তার প্রতিটি রেসপন্সই HTTP স্টান্ডার্ড মেনে দেয়। কখন কোন রেসপন্স হবে এর কোড কি হবে এটি জানা খুবই প্রয়োজন বিশেষ করে REST API এর জন্য। রেসপন্স সম্পর্কে এখান থেকে ধারনা পাবেন আর রেসপন্স কোড সম্পর্কে জানতে পারবেন এখান থেকে।

৮। Coding Standard

Coding Standard কোডের কোনো অংশ নয়। কিন্তু এটি কোডকে হিউম্যান রিড্যাবল করে ও টিমওয়াইজ কাজের করতে সুবিধা প্রদান করে এবং এতে কোড একটি ইন্টারন্যাশনাল স্টান্ডার্ড ফলো করে যাতে বিশ্বের যেকোন প্রোগ্রামার চাইলেই আপনার কোডে কন্ট্রিবিউট করতে পারে। বিশেষ করে আপনি ওপেনসোর্স প্রাজেক্টে কাজ করলে এর জুড়ি নেই। লারাভেল তাদের ফ্রেমওয়ার্কে PSR-2 কোডিং স্টান্ডার্ড ব্যবহার করেছে যেটি বর্তমানে পিএইচপি’র সবথেকে জনপ্রিয় ও স্বীকৃত স্টান্ডার্ড। তাই এটি সম্পর্কেও আপনাকে বিশদ ধারনা থাকা প্রয়োজন।

৯। JSON

লারাভেল মূলত REST API ডেভেলপ এর জন্য বিশেষভাবে ডিজাইন করা তাই লারাভেল তার সমস্থ কালেক্টিভ ডাটাকে JSON এ রিটার্ন করে বা আউটপুট দেয়। বর্তমান সময়ে প্রায় সকল API JSON response দেয়, তাই এটি জানা থাকা খুবই জরুরী লারাভেল শুরুর পূর্বে। এখান থেকে JSON সম্পর্কে জানতে পারবেন। আর পিএইচপি’র JSON ফাংশন সম্পর্কে জানতে পারবেন এখান থেকে।

১০। Latest PHP Version

লারাভেল সবসময় পিএইচপি’র সর্বশেষ অর্থাৎ লেটেস্ট ভার্সন ব্যবহার করে। তাই এটি ভালো হয় যে আপনি সবসময় পিএইচপি’র নতুন নতুন ফিচার ও আপডেট সম্পর্কে ধারনা রাখুন।

পরিশেষে বলবো অপারেটিং সিস্টেম হিসেবে *nix ভিত্তিক কোনো OS ব্যবহার করতে বিশেষ করে Ubuntu, Debian, Elementary আর অবশ্যই সিস্টেমে LAMP/LEMP স্টাক করে চালাবেন এতে রিয়েল সার্ভার ফ্লেভার পাবেন। অবশ্য এখন Docker এর যুগ, তাই এটিও জেনে নিতে পারেন। এতে করে আপনার DevOps জ্ঞান বৃদ্ধি পাবে ও লারাভেল ডেপলপমেন্টেও সুবিধা দিবে।

তো এই ছিলো আজকের আলোচনা, আশা করছি এবার লারাভেল সঠিক পথে ও সাহস নিয়ে শুরু করতে পারবেন ইনশা’‍‍‍আল্লাহ। আমার লেখা বা জানায় হয়তোবা অনেক ভূল ত্রুটি থাকতে পারে। আপনাদের চো‍খে কোন ভূল ধরা পরলে অবশ্যই অবশ্যই আমাকে জানাতে ভুলবেন না।

ধন্যবাদ সবাইকে :)

Originally published at gist.github.com.

--

--