Laravel Coding Standards and Best Practices
Laravel খুবই শক্তিশালী একটা PHP ফ্রেমওয়ার্ক। কিন্তু শুধুমাত্র কোড লিখলেই হবে না — standard ও best practice না মানলে কোড অগোছালো হয়, সমস্যা ধরে বের করা কঠিন হয়, আর ভবিষ্যতে maintain করাটাও বিরক্তিকর হয়ে পড়ে।
এই Article এ আমরা শিখবো কীভাবে Laravel প্রজেক্টে clean, professional, এবং scalable কোড লিখতে হয়।
✅ ১. PSR Standards অনুসরণ করুন
Laravel মূলত PHP-FIG এর PSR-12 Standard অনুসরণ করে। এটি হল একটি কোড স্টাইল গাইডলাইন, যেটা কোডকে সুন্দর, পড়তে সহজ, এবং ইউনিফর্ম করে তোলে।
- ইন্ডেন্টেশন : Tab না, ৪টি space ব্যবহার করুন
- Namespace: App\Http\Controllers (PSR-4 standard)
- Braces: {} নতুন লাইনে বসান
- ক্লাস/মেথড নাম: PascalCase বা camelCase
- ভ্যারিয়েবল নাম সবসময়: camelCase
👉 ভুল indent বা brace এর জন্য Laravel এর কোড অনেক সময় বুঝতে কষ্ট হয়।
✅ ২. ফোল্ডার স্ট্রাকচার বজায় রাখুন
Laravel-এ ডিফল্ট ফোল্ডার স্ট্রাকচার অনেক ভালোভাবে সাজানো থাকে। সেটা ঠিকভাবে অনুসরণ করলেই future maintenance অনেক সহজ হয়।
- Controller: app/Http/Controllers
- Model: app/Models
- View: resources/views
- Migration: database/migrations
👉 অনেকেই custom ফোল্ডারে কোড রাখেন, কিন্তু নতুন developer বুঝতে পারেন না। ডিফল্ট স্ট্রাকচারই ভালো।
✅ ৩. Route Separation করুন
Route গুলো কাজ অনুযায়ী আলাদা ফাইলে রাখলে প্রজেক্ট বড় হলেও ম্যানেজ করা সহজ হয়।
- Web: routes/web.php
- API: routes/api.php
বড় প্রজেক্টে আপনি আলাদা আলাদা route ফাইলও করতে পারেন —
যেমন routes/admin.php, routes/customer.php ইত্যাদি।
✅ ৪. Controller এ শুধু কম লজিক রাখুন
Controller slim রাখাই best practice। Complex logic, ডাটা প্রসেসিং বা external API call সব Service বা Repository class-এ রাখুন।
❌ ভুল:
public function store(Request $request) {
$user = new User();
$user->name = $request->name;
$user->save();
}✅ সঠিক:
public function store(UserService $service, Request $request) {
return $service->create($request->all());
}✅ ৫. Validation: Request Class ব্যবহার করুন
Laravel এর FormRequest class ব্যবহার করলে validation clean ও reusable হয়।
php artisan make:request StoreUserRequestController:
public function store(StoreUserRequest $request) {
User::create($request->validated());
}✅ ৬. Model: Fillable ব্যবহার করুন
Mass-assignment vulnerability থেকে বাঁচতে $fillable বা $guarded ব্যবহার করুন।
protected $fillable = ['name', 'email'];এতে করে আপনি কী কী ফিল্ড mass assign করতে দিচ্ছেন তা নির্ধারণ করতে পারবেন।
✅ ৭. Naming Convention মেনে চলুন
Laravel এ একটি নির্দিষ্ট naming convention আছে। এটাকে ফলো করলে কোড পড়া ও ধরতে অনেক সহজ হয়।
- Controller: UserController, PostController
- Model User, Order (singular)
- Migration create_users_table
- Table users, orders (plural)
- ForeignKey user_id, order_id
✅ ৮. Helper vs Facade – যেটা ভালো বুঝে ব্যবহার করুন
Laravel এ অনেক ফিচার দুইভাবে ব্যবহার করা যায় — Facade অথবা helper ফাংশন দিয়ে।
// Facade
Cache::put('key', 'value', 3600);
// Helper
cache(['key' => 'value'], 3600);👉 যেটাই ব্যবহার করুন, সারা প্রজেক্টে এক স্টাইল maintain করুন।
✅ ৯. Model-এ Casting, Accessor/Mutator ব্যবহার করুন
ডাটা type সঠিকভাবে handle করতে casting, accessor এবং mutator ব্যবহার করুন।
protected $casts = [
'email_verified_at' => 'datetime',
];
public function getFullNameAttribute() {
return $this->first_name . ' ' . $this->last_name;
}✅ ১০. Security follow করুন
Laravel অনেক security feature দেয়, কিন্তু সেগুলো ঠিকভাবে ব্যবহার না করলে সমস্যা হতে পারে।
- CSRF Token ব্যবহার করুন (form এ @csrf)
- Input validate করুন: $request->validated()
- Password hash করুন: Hash::make($password)
- Authorization Middleware ব্যবহার করুন (যেমন can, auth)
✅ ১১. Environment (.env) ফাইলে sensitive ডাটা রাখুন
DB_PASSWORD=secret123
MAIL_API_KEY=yourapikeyকখনো API key বা password সরাসরি কোডে লিখবেন না।
✅ ১২. API Response-এর জন্য Resource ব্যবহার করুন
API response গুলো consistent রাখতে Laravel এর Resource class ব্যবহার করুন।
return new UserResource($user);এতে API response structure cleaner হয়, future-proof থাকে।
✅ ১৩. Tinker/Seeder/Faker ব্যবহার করে Dummy Data তৈরি করুন
Development এর সময় ফাঁকা ডাটাবেজে কাজ করা কষ্টকর। Laravel এর built-in tools দিয়ে dummy data তৈরি করা খুবই সহজ।
Seeder উদাহরণ:
php artisan make:seeder UserSeeder// UserSeeder.php
User::factory()->count(10)->create();Seeder চালানো:
php artisan db:seed --class=UserSeeder👉 Realistic data দিতে চাইলে Faker ব্যবহার করুন।
✅ ১৪. Factory ব্যবহার করুন Testing ও Seeding-এর জন্য
Laravel Factory দিয়ে দ্রুত test data তৈরি করা যায়।
php artisan make:factory UserFactory --model=Userpublic function definition() {
return [
'name' => $this->faker->name,
'email' => $this->faker->safeEmail,
];
}✅ ১৫. Config cache/use করুন Production-এ
Production environment-এ performance boost করার জন্য নিচের command গুলো চালানো উচিত:
php artisan config:cache
php artisan route:cache
php artisan view:cache👉 Code change করলে এগুলো আবার regenerate করতে হবে।
✅ ১৬. Migration rollback/manage করা শিখুন
Migration structure clean রাখতে rollback, refresh, status command গুলো জানা জরুরি।
php artisan migrate:rollback
php artisan migrate:refresh
php artisan migrate:status✅ ১৭. Custom Artisan Command ব্যবহার করুন
কোনো repetitive task automate করতে Custom Artisan command তৈরি করতে পারেন।
php artisan make:command SendUserReminderএতে আপনার workflow অনেক automated হবে।
✅ ১৮. Service Provider ব্যবহার করুন Complex Binding-এর জন্য
Dependency বা complex logic bind করতে Custom Service Provider ব্যবহার করুন।
php artisan make:provider CustomServiceProviderregister() ও boot() মেথডে আপনার logic রাখুন।
✅ ১৯. Event & Listener ব্যবহার করুন
Separation of concern বজায় রাখতে Event-Driven architecture অনুসরণ করুন।
php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail👉 এতে core logic clean থাকে এবং extensibility বাড়ে।
✅ ২০. Logging সঠিকভাবে ব্যবহার করুন
Laravel এর Log Facade ব্যবহার করে error, warning বা info লগ করতে পারেন:
Log::info('User created', ['user_id' => $user->id]);প্রয়োজনে .env ফাইলে log level ঠিক করুন:
LOG_LEVEL=debug✅ ২১. Middleware ব্যবহার করে Request Filter করুন
Middleware দিয়ে request filter, logging, permission ইত্যাদি handle করুন।
php artisan make:middleware CheckIsAdminpublic function handle($request, Closure $next) {
if (!auth()->user()->isAdmin()) {
abort(403);
}
return $next($request);
}✅ ২২. Composer Scripts এবং Autoload Section ব্যাবহার করুন
composer.json ফাইলে script বা custom namespace define করে structure আরও clean করা যায়।
"autoload": {
"psr-4": {
"App\\Services\\": "app/Services/"
}
}👉 এরপর composer dump-autoload চালান।
✅ ২৩. Exception Handling Custom করুন
app/Exceptions/Handler.php ফাইলে আপনি custom exception response define করতে পারেন।
public function render($request, Throwable $exception) {
if ($exception instanceof NotFoundHttpException) {
return response()->json(['message' => 'Not Found!'], 404);
}
return parent::render($request, $exception);
}✅ ২৪. Unit Test এবং Feature Test লিখুন
প্রজেক্ট বড় হলে টেস্ট ছাড়া production-এ দেওয়া risky। Laravel এ Pest বা PHPUnit দিয়ে Test লিখুন।
php artisan make:test UserTestpublic function test_user_can_register() {
$response = $this->post('/register', [...]);
$response->assertStatus(302);
}✅ ২৫. API Rate Limiting ও Throttling চালু করুন
API কে abusive request থেকে বাঁচাতে Laravel এর built-in throttle middleware ব্যবহার করুন।
Route::middleware('throttle:60,1')->group(function () {
Route::get('/user', fn () => ...);
});✅ ২৬. Model-এ $casts ব্যবহার করুন — enum, int, boolean
Model এর $casts array ব্যবহার করলে Laravel অটোভাবে ডাটা convert করে দেয় যেভাবে আমরা চাই।
✅ Boolean Casting
protected $casts = [
'is_active' => 'boolean',
];ব্যাখ্যা: এখন আপনি $user->is_active করলে true/false পাবেন, even যদি DB-তে 1/0 থাকে।
✅ Integer Casting
protected $casts = [
'age' => 'integer',
];ব্যাখ্যা: $user->age সবসময় integer রিটার্ন করবে, even যদি DB-তে string "25" থাকে।
✅ Enum Casting (Laravel 9+)
Laravel 9+ থেকে আপনি PHP Enum ক্লাসকে সরাসরি cast করতে পারেন।
👉 Step 1: Enum ক্লাস তৈরি করুন
// app/Enums/UserStatus.php
enum UserStatus: string {
case Active = 'active';
case Inactive = 'inactive';
case Banned = 'banned';
}👉 Step 2: Model-এ Cast করুন
use App\Enums\UserStatus;
protected $casts = [
'status' => UserStatus::class,
];ব্যাখ্যা: এখন $user->status করলে আপনি enum object পাবেন — যেমন UserStatus::Active।
🟡 Extra Tip: Array, Date, Object casting
protected $casts = [
'meta' => 'array',
'published_at' => 'datetime',
'is_featured' => 'boolean',
];✅ Custom Cast Class
Laravel এ আপনি চাইলে নিজেই Custom Cast class বানিয়ে advanced casting করতে পারেন।
php artisan make:cast JsonToCollection// JsonToCollection.php
public function get($model, $key, $value, $attributes) {
return collect(json_decode($value, true));
}🧠 উপকারিতা:
- Data Type mismatch থেকে রক্ষা
- Code আরও predictable এবং readable
- Enum cast করলে Magic string বা typo সমস্যা থেকে মুক্তি
✅ ২৭. Custom Helper Function ব্যবহার করুন (যেমন: getUid(), authUser() ইত্যাদি)
আপনি চাইলে Laravel-এ আপনার নিজের Common কাজে লাগা ফাংশনগুলো এক জায়গায় লিখে সার্ভিসের মতো ব্যবহার করতে পারেন।
✅ Step 1: helpers.php ফাইল তৈরি করুন
app/Helpers/helpers.php
<?php
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
if (!function_exists('authUser')) {
function authUser() {
return Auth::user();
}
}
if (!function_exists('getUid')) {
function getUid($length = 10) {
return Str::random($length);
}
}
if (!function_exists('isAdmin')) {
function isAdmin() {
return authUser()?->role === 'admin';
}
}✅ Step 2: composer.json এ autoload করুন
"autoload": {
"files": [
"app/Helpers/helpers.php"
]
}তারপর:
composer dump-autoload✅ এখন যেকোনো জায়গায় ব্যবহার করুন:
$user = authUser();
$uid = getUid();
if (isAdmin()) {
// do admin stuff
}✅ ২৮. Laravel Built-in Helper Function গুলো ব্যবহার করুন
Laravel নিজেই অনেক কাজের Helper দেয় — নিচে কিছু জনপ্রিয় ও দরকারি ফাংশনের উদাহরণ:
✅ উদাহরণ:
$user = auth()->user();
$imagePath = asset('storage/profile.jpg');
$slug = Str::slug('Laravel Coding Standards 2025');
$requestData = request()->all();
dd($requestData);🧠 টিপস:
- আপনার helpers.php ফাইলে খুব বেশি জিনিস রাখবেন না — শুধুমাত্র generic ও reusable function রাখুন।
- শুধু এক-দুই জায়গায় ব্যবহারের জন্য helper না বানিয়ে সেই লজিক সরাসরি class বা service-এ রাখাই ভালো।
- Custom helper ফাংশনের নাম clear ও semantic রাখুন — যেমন getCurrentUserRole(), formatMoney(), isDemoMode() ইত্যাদি।
✅ ২৯. Helper Function + Service Layer একত্রে ব্যবহার করুন
Helper function দিয়ে কাজ ছোট করে আনা যায়, আর বড়/complex কাজ Service Class এ পাঠিয়ে clean রাখা যায়।
// Controller
public function store(Request $request, UserService $service) {
$data = $request->validated();
$data['uid'] = getUid();
$service->createUser($data);
}🔚 উপসংহার
এগুলো সব Laravel এর core coding practices এবং real-world প্রজেক্টে highly recommended। আপনি যদি এগুলো নিয়মিতভাবে ফলো করেন:
✅ আপনার কোড clean হবে
✅ আপনি interview-এ confident থাকবেন
✅ Team collaboration আরও smooth হবে
No comments