Header Ads

Header ADS

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 StoreUserRequest

Controller:

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=User
public 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 CustomServiceProvider

register() ও 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 CheckIsAdmin
public 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 UserTest
public 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

Theme images by fpm. Powered by Blogger.