Laravel: সম্পূর্ণ সহজ CRUD অ্যাপ্লিকেশন — রাউট রিসোর্স এবং রিসোর্সফুল কন্ট্রোলার | বাংলায় | Part 10.1
লারাভেলে CRUD (Create, Read, Update, Delete) অ্যাপ্লিকেশন তৈরি করা খুবই সহজ। এই লেখায় আমরা route resource এবং resourceful controllers এর মাধ্যমে সহজেই একটা Laravel CRUD অ্যাপ্লিকেশন তৈরি করবো। প্রচুর কোড উদাহরণসহ একটা বিস্তারিত বাংলা ব্যাখ্যা পাবেন।
কেমন আছেন সবাই? CRUD অ্যাপ্লিকেশন বলতে কি বুঝায় তা জানেন তো? CRUD মানে Create, Read, Update আর Delete। অর্থাৎ যেকোনো ওয়েবসাইট বা অ্যাপ্লিকেশনে এই চারটা ফিচারই থাকতে হবে। নতুন ডেটা তৈরি করা, তা পড়া বা দেখা, আপডেট করা এবং ডিলিট করার সুযোগ।
লারাভেলের রাউট রিসোর্স এবং রিসোর্সফুল কন্ট্রোলার ফিচারগুলো এই CRUD অপারেশনগুলোকে সহজেই ম্যানেজ করার সুযোগ দেয়। আজকে আমরা একটা সিম্পল ব্লগ অ্যাপ্লিকেশন তৈরি করবো এদের মাধ্যমে। তাহলে দেরি না করে আসা যাক কাজে।
প্রথম শুরু
প্রথমেই একটা নতুন লারাভেল প্রজেক্ট খুলি। তারপর আমাদের একটা Post
মডেল এবং মাইগ্রেশন ফাইল তৈরি করতে হবে।
php artisan make:model Post -m
এখন database/migrations
ফোল্ডারে গিয়ে মাইগ্রেশন ফাইলটি এডিট করে আমরা posts
টেবিলের জন্য কলামগুলো ডিফাইন করবো। যেমন:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
} // ...
}
তারপর মাইগ্রেশন রান করে টেবিলটি তৈরি করে ফেলি।
php artisan migrate
রাউট রিসোর্স
এবার আমাদের রাউটগুলো সেটআপ করতে হবে। routes/web.php
ফাইলটি এডিট করে আমরা একটা রাউট রিসোর্স ডিক্লেয়ার করবো।
<?php
use App\Http\Controllers\PostController;Route::resource('posts', PostController::class);
এই Route::resource()
একটা মেথড যা আপাতত সাতটা রুট তৈরি করবে আমাদের জন্য। posts
হচ্ছে রুটের প্রিফিক্স আর PostController
হচ্ছে যে কন্ট্রোলারটি এই রুটগুলো হ্যান্ডেল করবে।
আমরা পরে আরও রুট যোগ করতে পারবো। কিন্তু এখন থেকেই CRUD অপারেশনগুলো রান করার জন্য প্রস্তুত হয়ে গেছে আমাদের অ্যাপ্লিকেশন।
রিসোর্সফুল কন্ট্রোলার
এখন আমাদের PostController
তৈরি করতে হবে। এটা নীচের কমান্ডটি দিয়ে সহজেই করা যাবে:
php artisan make:controller PostController --resource
--resource
ফ্ল্যাগটি দিয়ে লারাভেল CRUD অপারেশনগুলোর জন্য প্রয়োজনীয় মেথডগুলো অটোমেটিক্যালি তৈরি করে দেবে আমাদের জন্য।
app/Http/Controllers/PostController.php
ফাইলটি এডিট করলে দেখতে পাবেন যে এটি অনেকগুলো মেথড রাখছে যেমন index()
, create()
, store()
, show()
, edit()
, update()
এবং destroy()
।
আমাদের এখন এই মেথডগুলো কাস্টমাইজ করতে হবে আমাদের প্রয়োজন অনুযায়ী। যেমন index()
মেথডটি আমাদের সকল পোস্ট দেখাবে:
public function index()
{
$posts = Post::latest()->get();
return view('posts.index', compact('posts'));
}
আর store()
মেথডটি নতুন পোস্ট তৈরি করবে:
public function store(Request $request)
{
Post::create($request->all());
return redirect()->route('posts.index')->with('success', 'Post created successfully!');
}
এইভাবে আমরা বাকি মেথডগুলোও ইমপ্লিমেন্ট করতে পারবো।
ভিউগুলো তৈরি করা
এখন আমাদের resources/views/posts
ফোল্ডারে কিছু ভিউ ফাইল তৈরি করতে হবে যেগুলো অ্যাক্টুভি পোস্ট দেখাবে, এডিট করার ফর্ম দেখাবে, ইত্যাদি। যেমন:
index.blade.php
(সকল পোস্ট দেখাবে)create.blade.php
(নতুন পোস্ট তৈরি করার ফর্ম দেখাবে)edit.blade.php
(পোস্ট এডিট করার ফর্ম দেখাবে)show.blade.php
(একটা নির্দিষ্ট পোস্টের ডিটেল দেখাবে)
এখানে আমরা লারাভেলের ব্লেড টেম্পলেটিং ইঞ্জিন ব্যবহার করবো, @extends
, @section
, @foreach
ইত্যাদি সিনট্যাক্স ব্যবহার করে।
একটা ছোট্ট প্রোগ্রাম
আমরা যদি এই পর্যন্ত যা করেছি তার একটা প্রোগ্রাম দেখি, তাহলে বুঝতে সহজ হবে। এই ছোট্ট প্রোগ্রামটি সম্পূর্ণ CRUD অ্যাপ্লিকেশনটি কভার করছে।
<?php
namespace App\Http\Controllers;use App\Models\Post;
use Illuminate\Http\Request;class PostController extends Controller
{
public function index()
{
$posts = Post::latest()->get();
return view('posts.index', compact('posts'));
} public function create()
{
return view('posts.create');
} public function store(Request $request)
{
Post::create($request->all());
return redirect()->route('posts.index')->with('success', 'Post created successfully!');
} public function show(Post $post)
{
return view('posts.show', compact('post'));
} public function edit(Post $post)
{
return view('posts.edit', compact('post'));
} public function update(Request $request, Post $post)
{
$post->update($request->all());
return redirect()->route('posts.index')->with('success', 'Post updated successfully!');
} public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('success', 'Post deleted successfully!');
}
}
আর ভিউগুলো এইরকম দেখতে পারে:
<!-- posts/index.blade.php -->
@extends('layouts.app')
@section('content')
<h1>All Posts</h1>
@foreach($posts as $post)
<div>
<h2>{{ $post->title }}</h2>
<p>{{ $post->body }}</p>
<a href="{{ route('posts.show', $post->id) }}">Read More</a>
</div>
@endforeach
@endsection
<!-- posts/show.blade.php -->
@extends('layouts.app')
@section('content')
<h1>{{ $post->title }}</h1>
<p>{{ $post->body }}</p>
@endsection
এভাবেই বাকি ভিউগুলোও থাকবে। আপনি দেখতে পাচ্ছেন যে এটা খুবই সিম্পল এবং সহজবোধ্য।
কিছু বাকি কাজ
এখনও আমাদের কিছু কাজ বাকি আছে। যেমন ভ্যালিডেশন, অথরাইজেশন এবং বিশেষ বিশেষ জায়গায় তথ্য দেখানো (যেমন ফ্ল্যাশ মেসেজ)। তবে মূলত CRUD অ্যাপ্লিকেশনটি তৈরি হয়ে গেছে।
এছাড়াও, রিসোর্স রাউটগুলোকে আরও কাস্টমাইজ করা যায়। যেমন আমরা কিছু রুট এক্সক্লুড করতে পারি এইভাবে:
Route::resource('posts', PostController::class)->except(['create', 'edit']);
অথবা মেথড স্পেসিফিক রুট এইভাবে যুক্ত করতে পারি:
Route::resource('posts', PostController::class)->only(['index', 'show']);
Route::get('posts/create', [PostController::class, 'create']);
Route::post('posts', [PostController::class, 'store']);
// etc
এছাড়াও আপনি নেস্টেড রিসোর্স এবং এপিআই রিসোর্স পদ্ধতি নিয়েও পড়তে পারেন।
সারসংক্ষেপ
বাহ! দেখলেন তো কীভাবে লারাভেলে রাউট রিসোর্স এবং রিসোর্সফুল কন্ট্রোলার ব্যবহার করে সহজেই একটা CRUD অ্যাপ্লিকেশন তৈরি করা যায়? রাউটগুলো ডিফাইন করা, কন্ট্রোলার মেথডগুলো লেখা এবং ভিউগুলোতে লজিক ইমপ্লিমেন্ট করার পরই আপনি হাতেনাতে পেয়ে গেলেন একটা কার্যকর অ্যাপ্লিকেশন।
এই রাউট রিসোর্স এবং কন্ট্রোলারগুলো অনেক কোড লেখা থেকে বাঁচিয়ে দেয় এবং আপনার কাজকে অনেক ই সহজ করে দেয়। তবে এগুলোকে আরও কাস্টমাইজ করা যায় আপনার প্রয়োজন অনুযায়ী। যাই হোক, জটিল যেকোনো প্রজেক্টে এই রিসোর্স রাউট এবং কন্ট্রোলারগুলো মিশিয়ে আপনি খুব সহজেই CRUD অ্যাপ্লিকেশন তৈরি করতে পারবেন।
আশা করি এই ব্যাখ্যাটি উপকারী হয়েছে।