Quản trị dữ liệu table với Laravel hướng dẫn thực hiện xem danh sách, thêm, xóa sửa dữ liệu đang có trong table (loại sản phẩm) với Laravel
Mục lục
- Tạo layout admin
- Chuẩn bị quản trị dữ liệu table
- Danh sách loại sản phẩm
- Thêm loại sản phẩm
- Sửa loại sản phẩm
- Xóa loại sản phẩm
Tạo layout admin
1. Tạo view layout
- Tạo file views/layoutadmin.blade.php
- Code
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"> <style> .container >header { height: 70px; line-height: 70px} .container > nav { height: 60px; } </style> <div class="container"> <header class="rows bg-info"> <h3>TECHCHAIN ADMIN WEBSITE</h3> </header> <nav class="row bg-secondary"> </nav> <main class="row"> @yield('noidung','Nội dung chính') </div> </div>
2. Tạo menu
(Menu có thể làm sau cũng được)
– Vào https://getbootstrap.com/docs/5.3/components/navbar/ và nhắp Copy
– Paste vào tag nav trong file layout admin và sửa code để được như sau
Chuẩn bị quản trị dữ liệu table
1. Tạo resource controller
php artisan make:controller LoaispController --resource
File LoaispController.php sẽ được tạo và có sẵn các hàm như bên dưới
2. Tạo routing cho chức năng quản trị Loaisp
Mở routes/web.php và code :
use App\Http\Controllers\LoaispController; Route::resource('admin/loaisp',LoaispController::class);
3. Tạo model ORM Loaisp
Chúng ta sẽ tương tác với database qua Eloquent ORM. Cho nên cần tạo model Loaisp. Nếu bạn chưa tạo model thì thực hiện tạo với lệnh php artisan make:model Loaisp Và khai báo các thông số trong model như sau:
<?php //app/Models/LoaiSP.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class LoaiSP extends Model { use HasFactory; protected $table ="loaisp"; public $primaryKey = "id"; public $timestamps = true; protected $fillable = ['id', 'tenLoai','soSP']; protected $attributes= ['soSP'=>0]; }
Danh sách loại sản phẩm
1. Nạp view trong controller
Code trong hàm index() của LoaispController
public function index() { return view("admin/loaisp"); }
2. Tạo file views/admin/loaisp.blade.php
@extends('layoutadmin') @section('noidung') <h1 class="text-primary p-2 h3" >QUẢN TRỊ LOẠI SẢN PHẨM</h1> <!-- table loại sản phẩm --> @endsection
Test: http://localhost:8000/admin/loaisp
3. Lấy danh sách loại từ database
– Trong LoaispController (phía trên class) , chỉ định useBootsrap cho paginator.
use Illuminate\Pagination\Paginator; Paginator::useBootstrap();
– Trong hàm index của LoaispController: lấy 1 trang dữ liệu.
public function index() { $perPage = 3; $loaisp = \App\Models\Loaisp::paginate($perPage); return view("admin.loaisp", ['loaisp'=>$loaisp] ); }
4. Hiển thị dữ liệu
<!-- views/loaisp.blade.php --> <table class='table table-hover table-strip table-bordered'> <tr class="bg-secondary"> <th>id</th> <th>Tên loại</th> <th>Số SP</th><th class="text-end">Hành động</th> </tr> @foreach ($loaisp as $row) <tr><td class="align-middle"> {{$row->id}} </td> <td class="align-middle"> {{$row->tenLoai}} </td> <td class="align-middle"> {{$row->soSP}} </td> <td class="align-middle text-end"> <form action="/admin/loaisp/{{$row->id}}" method="post"> <a href="/admin/loaisp/{{$row->id}}/edit" class="btn btn-primary">Chỉnh</a> <button class="btn btn-danger" type="submit">Xóa</button> @csrf @method('DELETE') </form> </td> </tr> @endforeach <tr> <td colspan="4"> {{ $loaisp->onEachSide(5)->links()}} </td> </tr> </table>
Thêm loại sản phẩm
1. Tạo view – form thêm loại
Tạo file views/admin/loaisp_them.blade.php
<!-- views/admin/loaisp_them.php --> @extends('layoutadmin') @section('noidung') <form class="mx-auto p-3 border border-primary" method="post" action="/admin/loaisp"> <h1 class="text-primary p-2 h3" >THÊM LOẠI SẢN PHẨM</h1> <div class="mb-3"> <label>Tên loại</label> <input class="form-control" name="tenLoai" > </div> <div class="mb-3"> <label>Số SP</label> <input class="form-control" name="soSP" type="number"> </div> <div class="mb-3"> <button type="submit" class="btn btn-warning py-2 px-5" >Lưu</button> </div> @csrf </form> @endsection
2. Nạp view trong controller
Thực hiện trong hàm create() của controller Loaisp
public function create() { return view("admin.loaisp_them"); }
Test xem form: http://localhost:8000/admin/loaisp/create
3. Code lưu database
Viết trong hàm store của controller Loaisp
public function store(Request $request) {
$arr = $request->post();
$tenLoai = ($request->has('tenLoai'))? $arr['tenLoai']:"";
$soSP = ($request->has('soSP'))? $arr['soSP']:"";
$tenLoai = trim(strip_tags($tenLoai));
$soSP = (int) $soSP;
$loai = new \App\Models\Loaisp;
$loai->tenLoai = $tenLoai;
$loai->soSP = $soSP;
$loai->save();
return redirect('/admin/loaisp');
}
Test
4. Validate form với request class
Chạy lệnh : php artisan make:request RuleNhapLoaisp
Mở file app/Http/Requests/RuleNhapLoaisp.php và thực hiện code
- Hàm authorize(): dùng true để cho phép hoạt động
- Khai báo các rule trong hàm rules() . Tham khảo https://laravel.com/docs/9.x/validation
- Định nghĩa hàm messages() để khai báo các báo lỗi
<?php //app/Http/Requests/RuleNhapLoaisp.php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class RuleNhapLoaisp extends FormRequest { public function authorize(){ return true; } public function rules() {return [ 'tenLoai' => ['required','min:3','max:20'], 'soSP' => ['required','integer', 'min:1'], ]; } public function messages(){ return [ 'tenLoai.required' => 'Bạn chưa nhập tên loại', 'tenLoai.min' => 'Tên loại ngắn quá vậy', 'tenLoai.max' => 'Tên loại dài quá', 'soSP.required' => 'Bạn chưa nhập số sản phẩm', 'soSP.min' => 'Nhập số SP>=1 nhé' ]; } }
– Hiện các lỗi trong view: Mở views/admin/loaisp_them.blade.php, code trong tag form
@if ($errors->any()) <div class="alert alert-info p-2"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Code sử dụng RuleNhapLoaisp trong controller: Sử dụng trong hàm stored()
Hiện các giá trị cũ user đã nhập trong form: Sử dụng hàm old() trong value của các input
Test
Sửa loại sản phẩm
1. Tạo view – form chỉnh loại
Tạo file views/admin/loaisp_edit.blade.php
<!-- views/admin/loaisp_edit.php --> @extends('layoutadmin') @section('noidung') <form class="mx-auto p-3 border border-primary" method="post" action="/admin/loaisp/{{$loaisp->id}}"> <h1 class="text-primary p-2 h3" >CHỈNH LOẠI SẢN PHẨM</h1> <div class="mb-3"> <label>Tên loại</label> <input value="{{$loaisp->tenLoai}}" class="form-control" name="tenLoai" > </div> <div class="mb-3"> <label>Số SP</label> <input value="{{$loaisp->soSP}}" class="form-control" name="soSP" type="number"> </div> <div class="mb-3"> <button type="submit" class="btn btn-warning py-2 px-5" >Lưu</button> </div> @csrf {{ method_field('PUT') }} </form> @endsection
2. Nạp view trong controller
Thực hiện trong hàm edit () của controller Loaisp
public function edit(Request $request,$id=0){ $loaisp = \App\Models\Loaisp::find($id); if ($loaisp==null) { $request->session()->flash('thongbao', "Loại sp $id không có"); return redirect("/thongbao"); } return view("admin.loaisp_edit", ['loaisp'=>$loaisp] ); }
Test xem form http://localhost:8000/admin/loaisp/1/edit
3. Code lưu database
Viết trong hàm update() của controller Loaisp
public function update(RuleNhapLoaisp $request, $id) { $arr = $request->post(); $tenLoai = ($request->has('tenLoai'))? $arr['tenLoai']:""; $soSP = ($request->has('soSP'))? $arr['soSP']:""; $tenLoai = trim(strip_tags($tenLoai)); $soSP = (int) $soSP; $loai = \App\Models\Loaisp::find($id); if ($loai == null) { $request->session()->flash('thongbao', "Loại sản phẩm $id không tồn tại"); redirect("/thongbao"); } $loai->tenLoai = $tenLoai; $loai->soSP = $soSP; $loai->save(); return redirect('/admin/loaisp'); }
Test
Xóa loại sản phẩm
1. Hỏi trước khi xóa
Mở file loaisp.blade.php và thêm code vào nút Xóa:
<!-- views/loaisp.blade.php --> <button onclick="return confirm('Xóa hả?')" class="btn btn-danger" type="submit"> Xóa </button>
2. Code xóa loại trong controller
Code trong hàm destroy của LoaispController
public function destroy($id) { $loai = \App\Models\Loaisp::find($id); if ($loai == null) { $request->session()->flash('thongbao', "Loại sp $id không có"); redirect("/thongbao"); } $loai->delete(); return redirect('/admin/loaisp'); }
Test
3. Kiểm tra trong loại có sản phẩm không
Các em tự thực hiện nhé
Bài viết Quản trị dữ liệu table với Laravel đã hướng dẫn bạn thực hiện quản trị dữ liệu trong table, cụ thể là table loại sản phẩm . Đây là phần quan trọng của công đoạn thực hiện quản trị website. Để quản trị các table khác, các bạn thực hiện tương tự như trên nhé.