Laravel CRUD অপারেশন পেজিনেশন টিউটোরিয়াল বাংলায়

Laravel CRUD
Spread the love

CRUD-Create,Read,Update এবং Delete এগুলো হচ্ছে যেকোন এপ্লিকেশন এর দরকারি ৪টি ফাংশন। Laravel CRUD এর জন্যে লারাভেলে Controller এবং Model দিয়ে সহজে সম্পন্ন করা যায়। আমরা Category মডিউল এর জন্যে কিভাবে Laravel CRUD অপারেশন সাথে পেজিনেশন এর কাজ করতে পারি তা দেখবো। তাহলে চলুন শুরু করা যাক।

ধাপ- ১ঃ লারাভেল ইন্সটল

আমরা লারাভেল এর ডিফল্ট লগিনসহ ইন্সটল কিভাবে করতে হই তা নিয়ে এখানে লিখেছি। যারা ইন্সটল করতে পারেন না তারা এই টিউটোরিয়াল টা দেখে নিন। যাই হোক মনে করি আপনি অলরেডি জানেন কিভাবে লারাভেল ইন্সটল করতে হই।

আশা করি আপনার PC তে লারাভেল ইন্সটল করা আছে।তাহলে আমরা পড়ের স্টেপ এ যায়

ধাপ-২ঃ Category Table Migrations এবং Model তৈরি

আমাদের এখন Category টেবিল এর Migrations এবং Model তৈরি করবো। যেই ফোল্ডারে আমাদের প্রজেক্ট আছে সেখানে টার্মিনাল ওপেন করে নিচের কমান্ড রান করবো

php artisan make:model Category -m

যদি Model ফাইলগুলো কোন ফোল্ডারের ভিতর রাখতে চান তাহলে নিচের মত কমান্ড রান করবেন

php artisan make:model Models\\Category -m

এখন আমরা Category মাইগ্রেশন ফাইল ওপেন করবো এবং title নামের একটি স্ট্রিং এড করবো।

database/migrations/184654_create_categories_table.php

/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->timestamps();
        });
    }

এখন Category মডেল ফাইল ওপেন করে নিচের মত মডিফাই করবো

app/Models/Category or app/Category

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    /**
     * @var string
     */
    protected $table = 'categories';

    /**
     * @var array
     */
    protected $fillable = ['title'];

}

ধাপ -৩ঃ Controller তৈরি

কন্ট্রোলার তৈরি করতে এখন আমরা টার্মিনাল এ নিচের কমান্ড টি রান করবো।

php artisan make:controller CategoryController --resource

উপরের কমান্ডটি আমাদের জন্যে একটি CategoryController তৈরি করে দিবে যেখানে index(),create(),store(),show(),edit(),update এবং delete() ফাংশনগুলি জেনারেট করে দিবে নিচের মত।

app/Http/Controllers/CategoryController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class CategoryController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
         //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
       //
    }
}

আপনি যদি কমান্ড –resource না দেন তাহলে এই ফাংশন গুলো ছাড়াই plain controller তৈরি হবে।

আপনি যদি controller টি কোন ফোল্ডারে রাখতে  চান তাহলে নিচের মত করে কমান্ড রান করুন।

php artisan make:controller Admin\\CategoryController --resource

ধাপ-৪ঃ Route সেটাপ

দুইভাবে রাউট লিখতে পারেন। একটি হচ্ছে resource রাউট যেখানে এক রাউট এই সব গুলা ফাংশন এর রাউট লিখা হয়ে যাবে।

Route::resource('category', 'CategoryController');

আরেকটি হচ্ছে সব গুলো আলাদা করে লিখা

Route::get('/', '[email protected]')->name('category.index');
Route::get('/create', '[email protected]')->name('category.create');
Route::post('/store', '[email protected]')->name('category.store');
Route::get('/show/{id}', '[email protected]')->name('category.show');
Route::get('/edit/{id}', '[email protected]')->name('category.edit');
Route::post('/update/{id}', '[email protected]')->name('category.update');
Route::delete('/{id}/destroy', '[email protected]')->name('category.destroy');

ধাপ-৫ঃ Menu সেট করা

নিচের লাইনটি views/layouts/app এ যুক্ত করে দিতে পারেন। পরে যখন আমরা localhost:8000/category তে যাব তখন এই মেনু তে ক্লিক করে যেতে পারবো

<li class="nav-item"><a class="nav-link" href="{{ route('category.create') }}">Category</a></li>

ধাপ-৬ঃ Category লিস্ট দেখা

প্রথমে আমাদের CategoryController এর index() এ নিচের মত লিখবো লিস্ট ডাটা ভিউ ফাইল এ পাঠানোর জন্যে। আর auth মিডলওয়্যার ব্যবহার করবো যাতে বাইরের কেউ ডাটা একসেস না পায়

use App\Category;
 
class CategoryController extends Controller
{
     public function __construct()
    {
        $this->middleware('auth');
    }
 
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        
        $categories= Category::latest()->paginate(5);
        return view('category.index', compact('categories'));
    }
}

এখন resources/views এ category ফোল্ডার বানাবো এবং সেখানে index.blade.php নামের একটি ফাইল তৈরি করবো।

তারপর নিচের মত ভিউ ফাইল মডিফাই করবো

     <div class="col-md-12">
            <div class="tile">
                <div class="tile-body">
                    <div class="table-responsive">
                        <table class="table table-hover table-bordered">
                            <thead>
                                <tr>
                                    <th> SL </th>
                                    <th> Category Title </th>
                                    <th style="width:100px; min-width:100px;" class="text-center text-danger"><i class="fa fa-bolt"> </i></th>
                                </tr>
                            </thead>
                            <tbody>
                                @php $i = 1; @endphp
                                @foreach($categories as $item)
                                    <tr>
                                        <td>{{ $i++ }}</td>
                                        <td>{{ $item->title }}</td>
                                        <td class="text-center">
                                            <div class="btn-group" role="group" aria-label="Second group">
                                                <a href="{{ route('category.edit', $item->id) }}" class="btn btn-sm btn-primary"><i class="fa fa-edit"></i></a>
                                                <form  action="{{ route('category.destroy', $item->id) }}" method="POST" style="display: inline-block;">
                                                    @csrf
                                                    @method('DELETE')
                                                    <button class=""btn btn-sm btn-danger">
                                                       <i class="fa fa-trash"></i>
                                                    </button>
                                                </form>
                                            </div>
                                        </td>
                                    </tr>
                                @endforeach
                            </tbody>
                        </table>

                       {{$categories->links()}}
                    </div>
                </div>
            </div>
        </div>

 

এটি Larvel CRUD এর লিস্ট পার্ট। লিস্ট দেখতে নিচের মত দেখাবে

php laravel bangla

ধাপ -৭ঃনতুন Category Create

এখন Category Controller এর create() ফাংশন নিচের মত মডিফাই করবো

/**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('category.create');
    }

তারপর resources/views এ category ফোল্ডারে create.blade.php নামের একটি নতুন ফাইল তৈরি করবো। তারপর নিচের মত একটি ফর্ম বানাবো

<form action="{{ route('category.store') }}" method="POST">
      @csrf
      <h3 class="tile-title">Category Create</h3>
      <hr>
      <div class="tile-body">
          <div class="form-group ">
              <label class="control-label">Category Title</label>
              <input class="form-control @error('title') is-invalid @enderror" type="text" name="title"  placeholder="Category Title">
              <div class="invalid-feedback active">
                  <i class="fa fa-exclamation-circle fa-fw"></i> @error('title') <span>{{ $message }}</span> @enderror
              </div>
          </div>
        </div>
      <div class="tile-footer">
          <div class="row d-print-none">
              <div class="col-12 text-right">
                  <button class="btn btn-success" type="submit"><i class="fa fa-fw fa-lg fa-check-circle"></i>Save Category</button>
              </div>
          </div>
      </div>
  </form>

 

এটি নরমাল HTML ফর্ম। এখানে @csrf  অতিরিক্ত যুক্ত করেছি। এটি ছাড়া লারাভেল ফর্ম প্রসেস করতে দিবে না। এটি একটি হাইডেন টোকেন যুক্ত করে যা সিকিউরিটির জন্যে ব্যবহার করা হই।

তারপর CategoryController এর store() ফাংশন নিয়ে কাজ করবো ডাটাবেজে ডাটা Store করার জন্যে নিচের কোড এর মত

/**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request,[
            'title'  =>'required',
            
        ]);
        $category = new Category();
        $category->title = $request->title;
        $category->save();

        return redirect()->route('category.index');
    }

এটি দেখতে নিচের মত হতে পারে।এটি Laravel CRUD এর Create অংশ

 Laravel CRUD

 

ধাপ -৮ঃ Category ডাটা আপডেট

Controller এর edit() ফাংশনটি মডিফাই করবো নিচের মত করে

/**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $category = Category::findOrFail($id);

        return view('category.edit', compact('category'));
    }

এখানে যেই ডাটা আপডেট করবো সেই ডাটার edit বাটন এ ক্লিক করলে তার আইডি অনুয়ায়ী ডাটা সহ edit ফর্ম দেখা যাবে।তার জন্যে আগে আমাদের findOrFail() ফাংশন দিয়ে Category টেবিল থেকে id এর ডাটা খুজে ডাটা ভিউ এর সাথে পাঠানো হয়েছে

তারপর resources/views এ category ফোল্ডারে edit.blade.php নামের একটি নতুন ফাইল তৈরি করবো। তারপর নিচের মত কোড লিখবো

<div class="col-md-12">
         <div class="tab-content">
             <div class="tab-pane active">
                 <div class="tile">
                     <form action="{{ route('category.update',$category->id) }}" method="POST">
                         @csrf
                         <h3 class="tile-title">Category Information</h3>
                         <input type="hidden" name="id" value="{{$category->id}}"/>
                         <hr>
                         <div class="tile-body">
                             <div class="form-group ">
                                 <label class="control-label">Category Title</label>
                                 <input class="form-control @error('title') is-invalid @enderror" type="text" name="title" value="{{$category->title}}" placeholder="Category Title">
                                 <div class="invalid-feedback active">
                                     <i class="fa fa-exclamation-circle fa-fw"></i> @error('title') <span>{{ $message }}</span> @enderror
                                 </div>
                             </div>
                           </div>
                         <div class="tile-footer">
                             <div class="row d-print-none">
                                 <div class="col-12 text-right">
                                     <button class="btn btn-success" type="submit"><i class="fa fa-fw fa-lg fa-check-circle"></i>Update Category</button>
                                     <a class="btn btn-danger" href="{{ route('category.index') }}"><i class="fa fa-fw fa-lg fa-arrow-left"></i>Go Back</a>
                                 </div>
                             </div>
                         </div>
                     </form>
                 </div>
             </div>
         </div>
     </div>

এখন Controller এ যেয়ে update() ফাংশন টি নিচের মত মোডিফাই করবো

/**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request,[
            'title'  =>'required',
            
        ]);
        $category =  Category::findOrFail($id);
        $category->title = $request->title;
        $category->update();

        return redirect()->route('category.index');
    }

এখন ডাটা আপডেট হবে।এটি Laravel CRUD এর Update অংশ । ফর্মটি দেখতে নিচের মত দেখাবে।

laravel project in bangla

 

ধাপ-৯ঃCategory ডাটা ডিলেট

এই অংশে আমরা Laravel CRUD  এর Delete টা দেখব। CategoryController এ delete() ফাংশন  নিচের মত কোড লিখবো

/**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        Category::findOrFail($id)->delete();

        return redirect()->back();
    }

এখন ডিলেট বাটন এ ক্লিক করলে ডাটা ডিলেট হবে

আর Laravel CRUD এর আরেক অংশ Read এর কাজ করা হই show() ফাংশন এ,নিচের মত কোড লিখতে হই

/**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $category = Category::findOrFail($id);

        return view('category.show', compact('category'));
    }

 

আজ এতটুকুই। চাইলে এখান থেকে লারাভেল মাল্টি অথ টা দেখতে পারেন

লারাভেল ৬ মাল্টি অথেন্টিকেশন

Leave a Reply

Your email address will not be published. Required fields are marked *