—
(Part# 5 ต่อ) วิธีการจัดการกับผู้ใช้ระบบทั้งหมด (users management)

จากในภาพ เราจะคลิ๊กที่เมนู All Users เพื่อดึงข้อมูลผู้ใช้ทั้งหมดที่มีในระบบ ประกอบไปด้วย admin และ user ทั้งหมดถูกเก็บไว้ในตาราง(table) user
1. อันดับแรกสร้างเร้าท์(route) เพื่อให้เมนู All Users สามารถคลิ๊กได้ โดยเปิดไฟล์ sidebar.blade.php เพิ่มเร้าท์เพื่อลิ้งค์ ดังโค้ดด้านล่าง
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="{{ route('admin.user.showusers') }}" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<div class="round-16 d-flex align-items-center justify-content-center">
<i class="ti ti-circle"></i>
</div>
<span class="hide-menu">All Users</span>
</div>
</a>
</li>
จากนั้นเพิ่มข้อมูลเร้าท์ในไฟล์ web.php
<?php
use App\Http\Controllers\UserController;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
Route::get('/', function () {
return view('welcome');
});
Route::get('/dashboard', [AdminController::class, 'home'])
->middleware(['auth', 'verified'])->name('dashboard');
Route::get('/admin/dashboard', [AdminController::class, 'index'])
->middleware(['auth', 'admin'])->name('admin.dashboard');
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
//ส่วน Admin
Route::name("admin.")->prefix("/admin")->middleware(["auth"])->group(function() {
Route::get('/show_users', [UserController::class, 'index'])->name('user.showusers');
});
require __DIR__.'/auth.php';
2. ขั้นตอนต่อไป สร้างคอนโทรลเลอร์ ชื่อ UserController ใช้คำสั่งสร้างบน terminal ของ vs code
php artisan make:controller UserController -r
3. เปิดไฟล์ UserController เพิ่มโค้ดในส่วนฟังก์ชั่น index โดยด้านบนส่วนหัวให้ใส่ use…ตรงสีแดงด้วย
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$users = User::paginate(5);
return view('admin.user.index', compact('users'));
}
4. สังเกตในฟังก์ชั่น index บรรทัดที่เขียนว่า return view(‘admin.user.index’, compact(‘users’)); แสดงให้เห็นว่าต้องเปิดไฟล์ชื่อ index อยู่ในโฟลเดอร์ admin/user ดังนั้นให้ทำการสร้างไฟล์ index ไว้ใน admin/user/index.blade.php ให้เรียบร้อย
5.ใส่โค้ดต่อไปนี้ลงในไฟล์ index.blade.php
@extends('layouts.app')
@section('content')
<div class="card">
@if (session("success"))
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><i class="icon fas fa-check"></i> Success!</h5>
<p class="m-0">{{ session("success") }}</p>
</div>
@endif
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<div class="card-body">
<div class="d-md-flex align-items-center">
<div>
<h4 class="card-title">รายชื่อผู้ใช้ระบบ</h4>
<p class="card-subtitle">
Admin Vs User
</p>
</div>
<div class="ms-auto mt-3 mt-md-0">
<a href="{{ route('admin.user.create') }}" class="btn btn-outline-info">+ NewUser</a>
</div>
</div>
<div class="table-responsive mt-4">
<table class="table mb-0 text-nowrap varient-table align-middle fs-3">
<thead>
<tr>
<th scope="col" class="px-0 text-muted">
#
</th>
<th scope="col" class="px-0 text-muted">
Images
</th>
<th scope="col" class="px-0 text-muted">
Name
</th>
<th scope="col" class="px-0 text-muted">Email</th>
<th scope="col" class="px-0 text-muted">UserType</th>
<th scope="col" class="px-0 text-muted">Action</th>
</tr>
</thead>
<tbody>
@foreach ($users as $user )
<tr>
<td class="px-0">{{ $loop->iteration }}</td>
<td class="px-0">
<div class="d-flex align-items-center">
<img src="{{ asset('assets/images/profile/'.$user->profile) }}" class="rounded-circle" width="40"
alt="user_image" />
</div>
</td>
<td class="px-0">
<div class="d-flex align-items-center">
<div>
<h6 class="mb-0 fw-bolder">{{ $user->name }}</h6>
<span class="text-muted">nickname:{{ $user->username }}</span>
</div>
</div>
</td>
<td class="px-0">{{ $user->email }}</td>
<td class="px-0">{{ $user->usertype }}</td>
<td class="px-0">
<div class="d-flex align-items-center">
<a href="#" class="btn btn-success btn-sm">View</a>
<a href="#" class="btn btn-warning btn-sm">Edit</a>
<form action="#" method="">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>
</div>
</td>
</tr>
</tbody>
@endforeach
</table>
</div>
</div>
</div>
<div class="d-flex justify-content-center">
{{ $users->links() }}
</div>
@endsection
-สังเกตส่วนท้ายที่ตัวหนังสือสีแดง $user->links() หมายถึงคำสั่งในการแบ่งหน้า ซึ่งใน UserController ฟังก์ชั่น index เขียนไว้ว่า $users = User::paginate(5); เท่ากับมีแบ่งแสดงหน้า หน้าละ 5 รายการ
* เพื่อให้การแสดงผลคำสั่งการแบ่งหน้าใช้งานได้ ต้องเปิดไฟล์ AppServiceProvider.php ที่อยู่ในโฟลเดอร์ app/Providers แล้วเพิ่มโค้ดในส่วน boot() ดังนี้
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator; //เพิ่มตรงนี้ด้วย
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Paginator::useBootstrap();
}
}
5. ในไฟล์หน้า index.blade.php บริเวณที่มีตัวหนังสือสีแดง
- ได้มีการสร้างปุ่มไว้ด้านมุมขวาของหน้าจอ เพื่อใช้สร้างผู้ใช้ใหม่ New User (ใช้เร้าท์เดียวกับเมนู)
- และในเมนูด้านซ้ายตรงเมนู New User ให้เพิ่มเร้าท์ลิ้งค์ที่เมนู New User ในไฟล์ sidebar.blade.php ดังนี้
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="{{ route('admin.user.create') }}">
<div class="d-flex align-items-center gap-3">
<div class="round-16 d-flex align-items-center justify-content-center">
<i class="ti ti-circle"></i>
</div>
<span class="hide-menu">New User</span>
</div>
</a>
</li>
6. เพิ่มข้อมูลในเร้าท์ในไฟล์ web.php
Route::get('/create_users', [UserController::class, 'create'])->name('user.create');
7. สร้างไฟล์ create.blade.php ไว้ในโฟลเดอร์ admin/user และใส่โค้ดลงในไฟล์ create.blade.php (โดยให้ไปคัดลอกโค้ดจาก user profile มาใส่ได้เลย) ทำการเปลี่ยนแปลงแก้ไขฟิลด์ต่างๆให้ถูกต้อง ดังโค้ดด้านล่าง
@extends('layouts.app')
@section('items')
<div class="card-header d-flex justify-content-between align-items-center">
<h3 class="m-0">New User</h3>
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="/dashboard">Dashboard</a></li>
<li class="breadcrumb-item active">New User</li>
</ol>
</div>
@endsection
@section('content')
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger alert-dismissible">
<h5><i class="ti ti-alert-circle"></i> Error!</h5>
@foreach ($errors->all() as $error)
<p class="m-0">{{ $error }}</p>
@endforeach
</div>
@endif
<form action="{{ route("admin.user.store") }}" enctype="multipart/form-data" method="POST">
@csrf
<div class="row">
<div class="col-md-6 mx-auto mb-3">
<div class="form-group">
<label for="profile">Profile Photo</label>
<img width="120px" id="profilepreview" height="120px" src="{{ asset("assets/images/profile/".($user->profile ?? "user-8.jpg")) }}" class="d-block rounded rounded-circle mb-2"/>
<input type="file" class="form-control" id="profile" name="profile" accept="image/*"/>
</div>
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Enter name" value="{{ old('name') }}" required />
</div>
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Enter username" value="{{ old('username') }}"/>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Enter email" value="{{ old('email') }}" required/>
</div>
<div class="form-group">
<label for="Password">Password</label>
<input type="password" class="form-control" id="password" name="password" required/>
</div>
<div class="form-group">
<label for="about">About</label>
<textarea class="form-control" id="about" name="about" rows="4" value="{{ old('about') }}"></textarea>
</div>
</div>
<div class="col-md-6 mx-auto">
<div class="form-group">
<label for="about">UserType</label>
<select class="form-control" id="usertype" name="usertype">
<option value="admin">ผู้ดูแลระบบ</option>
<option value="admin">ผู้ใช้ทั่วไป</option>
</select>
</div>
<div class="form-group">
<label for="facebook">Facebook</label>
<input type="url" class="form-control" id="facebook" name="facebook" placeholder="Enter facebook profile link" value="{{ old('facebook') }}"/>
</div>
<div class="form-group">
<label for="twitter">Twitter</label>
<input type="url" class="form-control" id="twitter" name="twitter" placeholder="Enter twitter profile link" value="{{ old('twitter') }}"/>
</div>
<div class="form-group">
<label for="instagram">Instagram</label>
<input type="url" class="form-control" id="instagram" name="instagram" placeholder="Enter instagram profile link" value="{{ old('instagram') }}"/>
</div>
<div class="form-group">
<label for="linkedin">LinkedIn</label>
<input type="url" class="form-control" id="linkedin" name="linkedin" placeholder="Enter linkedin profile link" value="{{ old('linkedin') }}"/>
</div>
<div class="form-group">
<label for="youtube">YouTube</label>
<input type="url" class="form-control" id="youtube" name="youtube" placeholder="Enter youtube profile link" value="{{ old('youtube') }}"/>
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Save</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@section("script")
<script src="{{ asset("assets/js/sweetalert2.all.min.js") }}"></script>
<script>
$(document).ready(function() {
function readURL(input, preview, image) {
if (input.files && input.files[0] && input.files[0].type.includes("image")) {
var reader = new FileReader();
reader.onload = function (e) {
$(preview).removeClass("d-none");
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
} else {
$(image).val('');
$(preview).addClass("d-none");
Swal.fire({
icon: "error",
text: "Select a valid image!"
});
}
}
$("#profile").change(function(){
readURL(this, "#profilepreview", "#profile");
});
});
</script>
@endsection
-ในไฟล์ create.blade.php มีตัวหนังสือสีแดง <form action=”{{ route(“admin.user.store”) }}” enctype=”multipart/form-data” method=”POST”> ดังนั้นต้องดำเนินการเพิ่ม route ในไฟล์ web.php
//ส่วน Admin
Route::name('admin.')->prefix('/admin')->middleware('auth')->group(function(){
Route::get('/show_users', [UserController::class, 'index'])->name('user.showusers');
Route::get('/create_users', [UserController::class, 'create'])->name('user.create');
Route::post('/new_users', [UserController::class, 'store'])->name('user.store');
8. เปิดไฟล์ UserController เพิ่มโค้ดลงในส่วนฟังก์ชั่น store ดังนี้
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'username' => 'nullable|string|max:255',
'about' => 'nullable|string|max:255',
'email' => 'required','string','lowercase','email','max:255',
'usertype' => 'required|string|max:255',
'profile' => 'nullable|image|max:2048',
'password' => 'required|string|min:8',
'facebook' => 'nullable|string|max:255',
'twitter' => 'nullable|string|max:255',
'instagram' => 'nullable|string|max:255',
'linkedin' => 'nullable|string|max:255',
'youtube' => 'nullable|string|max:255'
]);
$validated['password'] = bcrypt($validated['password']);
if ($request->hasFile('profile') && $request->file('profile')->isValid()) {
$image = $request->file("profile");
$imageName = time() . '.' . $image->getClientOriginalExtension();
$image->move(public_path("assets/images/profile"), $imageName);
$validated['profile'] = $imageName;
}
$user = User::create($validated);
return to_route('admin.user.showusers')->with('status', 'New User-created');
}
บันทึกทุกอย่างให้เรียบร้อย จากนั้นทดสอบใส่ข้อมูล (ต้องใช้งานได้)
9. ขั้นตอนต่อไป คลิ๊กที่ปุ่ม view เพื่อดูข้อมูลผู้ใช้รายนั้นๆโดยละเอียด
เริ่มโดยการสร้างเร้าท์เพื่อลิ้งค์ที่ปุ่ม view ดังนี้
<td class="px-0">
<div class="d-flex align-items-center">
<a href="{{ route('admin.user.show') }}" class="btn btn-success btn-sm">View</a>
<a href="{{ route('admin.user.edit') }}" class="btn btn-warning btn-sm">Edit</a>
<form action="#" method="">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>
</div>
</td>
10. เพิ่มข้อมูลใน web.php
//ส่วน Admin
Route::name("admin.")->prefix("/admin")->middleware(["auth"])->group(function() {
Route::get('/show_users', [UserController::class, 'index'])->name('user.showusers');
Route::get('/create_users', [UserController::class, 'create'])->name('user.create');
Route::post('/add_users', [UserController::class, 'store'])->name('user.store');
Route::get('/show_users', [UserController::class, 'show'])->name('user.show');
});
10. เพิ่มข้อมูลลงในไฟล์ UserController ฟังก์ชั่น show ดังนี้
public function show(string $id)
{
$user = User::find($id);
return view('admin.user.show', compact('user'));
}
11. สร้างไฟล์ show.blade.php ไว้ในโฟลเดอร์ admin/user/show.blade.php และใส่โค้ด ดังนี้
@extends('layouts.app')
@section('items')
<div class="card-header d-flex justify-content-between align-items-center">
<h3 class="m-0">User Details</h3>
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="/dashboard">Dashboard</a></li>
<li class="breadcrumb-item active">User Details</li>
</ol>
</div>
@endsection
@section('content')
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-6 mx-auto">
<div class="form-group">
<label for="profile">User Photo</label>
<img width="120px" id="profilepreview" height="120px" src="{{ asset("assets/images/profile/".($user->profile ?? "user-8.jpg")) }}" class="d-block rounded rounded-circle mb-2"/>
</div>
<div class="form-group mb-2">
<label for="name">ชื่อ-นามสกุล</label>
<input type="text" class="form-control" value="{{ $user->name }}" readonly/>
</div>
<div class="form-group mb-2">
<label for="username">Username</label>
<input type="text" class="form-control" value="{{ $user->username }}" readonly/>
</div>
<div class="form-group mb-2">
<label for="email">Email</label>
<input type="email" class="form-control" value="{{ $user->email }}" readonly/>
</div>
<div class="form-group mb-3">
<label for="about">About</label>
<textarea class="form-control" rows="4" readonly>{{ $user->about }}</textarea>
</div>
</div>
<div class="col-md-6 mx-auto">
<div class="form-group mb-2">
<label for="facebook">Facebook</label>
<input type="url" class="form-control" value="{{ $user->facebook }}" readonly/>
</div>
<div class="form-group mb-2">
<label for="twitter">Twitter</label>
<input type="url" class="form-control" value="{{ $user->twitter }}" readonly/>
</div>
<div class="form-group mb-2">
<label for="instagram">Instagram</label>
<input type="url" class="form-control" value="{{ $user->instagram }}" readonly/>
</div>
<div class="form-group mb-2">
<label for="linkedin">LinkedIn</label>
<input type="url" class="form-control" value="{{ $user->linkedin }}" readonly/>
</div>
<div class="form-group">
<label for="youtube">YouTube</label>
<input type="url" class="form-control" value="{{ $user->youtube }}" readonly/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
ทดสอบการใช้งาน โดยคลิ๊กที่ปุ่ม view (ใช้งานได้แล้ว)
12. ที่ปุ่ม Edit ให้ทำการสร้างเร้าท์เพื่อลิงค์ โดยเพิ่มโค้ด ดังนี้
<td class="px-0">
<div class="d-flex align-items-center">
<a href="{{ route('admin.user.show', $user->id) }}" class="btn btn-success btn-sm">View</a>
<a href="route('admin.user.edit', $user->id)" class="btn btn-warning btn-sm">Edit</a>
<form action="#" method="">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>
</div>
</td>
13. เพิ่มข้อมูลใน web.php ดังนี้
//ส่วน Admin
Route::name("admin.")->prefix("/admin")->middleware(["auth"])->group(function() {
Route::get('/show_users', [UserController::class, 'index'])->name('user.showusers');
Route::get('/create_users', [UserController::class, 'create'])->name('user.create');
Route::post('/add_users', [UserController::class, 'store'])->name('user.store');
Route::get('/show_users/{id}', [UserController::class, 'show'])->name('user.show');
Route::get('/edit_users/{id}', [UserController::class, 'edit'])->name('user.edit');
});
14. เพิ่มข้อมูลในไฟล์ UserController ในส่วนฟังก์ชั่น edit ดังนี้
public function edit(string $id)
{
$user = User::find($id);
return view('admin.user.edit', compact('user'));
}
15. สร้างไฟล์ edit.blade.php ไว้ในโฟลเดอร์ admin/user/edit.blade.php เพิ่มโค้ด ดังนี้
@extends('layouts.app')
@section('items')
<div class="card-header d-flex justify-content-between align-items-center">
<h3 class="m-0">Edit User Profile</h3>
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="/dashboard">Dashboard</a></li>
<li class="breadcrumb-item active">Edit User Profile</li>
</ol>
</div>
@endsection
@section('content')
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><i class="icon fas fa-ban"></i> Error!</h5>
@foreach ($errors->all() as $error)
<p class="m-0">{{ $error }}</p>
@endforeach
</div>
@endif
@if (session("success"))
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><i class="icon fas fa-check"></i> Success!</h5>
<p class="m-0">{{ session("success") }}</p>
</div>
@endif
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<form action="{{ route('admin.user.update', $user->id) }}" enctype="multipart/form-data" method="POST">
@csrf
@method('PATCH')
<div class="row">
<div class="col-md-6 mx-auto">
<div class="form-group">
<label for="profile">Profile Photo</label>
<img width="120px" id="profilepreview" height="120px" src="{{ asset("assets/images/profile/".($user->profile ?? "user-8.jpg")) }}" class="d-block rounded rounded-circle mb-2"/>
<input type="file" class="form-control" id="profile" name="profile" accept="image/*"/>
</div>
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Enter name" value="{{ $user->name }}"/>
</div>
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Enter username" value="{{ $user->username }}"/>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Enter email" value="{{ $user->email }}"/>
</div>
<div class="form-group">
<label for="usertype">UserType</label>
<input type="text" class="form-control" id="usertype" name="usertype" placeholder="Enter usertype" value="{{ $user->usertype }}"/>
</div>
<div class="form-group mb-3">
<label for="about">About</label>
<textarea class="form-control" id="about" name="about" rows="4">{{ $user->about }}</textarea>
</div>
</div>
<div class="col-md-6 mx-auto">
<div class="form-group">
<label for="facebook">Facebook</label>
<input type="url" class="form-control" id="facebook" name="facebook" placeholder="Enter facebook profile link" value="{{ $user->facebook }}"/>
</div>
<div class="form-group">
<label for="twitter">Twitter</label>
<input type="url" class="form-control" id="twitter" name="twitter" placeholder="Enter twitter profile link" value="{{ $user->twitter }}"/>
</div>
<div class="form-group">
<label for="instagram">Instagram</label>
<input type="url" class="form-control" id="instagram" name="instagram" placeholder="Enter instagram profile link" value="{{ $user->instagram }}"/>
</div>
<div class="form-group">
<label for="linkedin">LinkedIn</label>
<input type="url" class="form-control" id="linkedin" name="linkedin" placeholder="Enter linkedin profile link" value="{{ $user->linkedin }}"/>
</div>
<div class="form-group">
<label for="youtube">YouTube</label>
<input type="url" class="form-control" id="youtube" name="youtube" placeholder="Enter youtube profile link" value="{{ $user->youtube }}"/>
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Update</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@section("script")
<script src="{{ asset("assets/js/sweetalert2.all.min.js") }}"></script>
<script>
$(document).ready(function() {
function readURL(input, preview, image) {
if (input.files && input.files[0] && input.files[0].type.includes("image")) {
var reader = new FileReader();
reader.onload = function (e) {
$(preview).removeClass("d-none");
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
} else {
$(image).val('');
$(preview).addClass("d-none");
Swal.fire({
icon: "error",
text: "การเลือกรูปแบบ image ไม่ถูกต้อง!"
});
}
}
$("#profile").change(function(){
readURL(this, "#profilepreview", "#profile");
});
});
</script>
@endsection
15. เพิ่มข้อมูลใน web.php ดังนี้
//ส่วน Admin
Route::name("admin.")->prefix("/admin")->middleware(["auth"])->group(function() {
Route::get('/show_users', [UserController::class, 'index'])->name('user.showusers');
Route::get('/create_users', [UserController::class, 'create'])->name('user.create');
Route::post('/add_users', [UserController::class, 'store'])->name('user.store');
Route::get('/show_users/{id}', [UserController::class, 'show'])->name('user.show');
Route::get('/edit_users/{id}', [UserController::class, 'edit'])->name('user.edit');
Route::patch('/update_users/{id}', [UserController::class, 'update'])->name('user.update');
});
16. เพิ่มข้อมูลใน UserController ส่วนของฟังก์ชั่น update ด้วยโค้ด ดังนี้
public function update(Request $request, string $id)
{
$user = User::find($id);
$validated = $request->validate([
'name' => 'required|string|max:255',
'username' => 'nullable|string|max:255',
'about' => 'nullable|string|max:255',
'email' => 'required','string','lowercase','email','max:255',
'usertype' => 'required|string|max:255',
'profile' => 'nullable|image|max:2048',
'facebook' => 'nullable|string|max:255',
'twitter' => 'nullable|string|max:255',
'instagram' => 'nullable|string|max:255',
'linkedin' => 'nullable|string|max:255',
'youtube' => 'nullable|string|max:255'
]);
if ($request->hasFile('profile') && $request->file('profile')->isValid()) {
$image = $request->file("profile");
$imageName = time() . '.' . $image->getClientOriginalExtension();
$image->move(public_path("assets/images/profile"), $imageName);
if ($user->profile) {
if (File::exists(public_path("assets/images/profile/".$user->profile))) {
File::delete(public_path("assets/images/profile/".$user->profile));
}
}
$validated['profile'] = $imageName;
}
$user->update($validated);
return to_route('admin.user.edit', $user->id)->with('status', 'User-Data Updated');
}
และ use ไฟล์ ในส่วนหัวด้านบนไฟล์ UserController ด้วย ดังนี้
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
17. ทดสอบใช้งานในส่วนปุ่ม edit
18. เพิ่มข้อมูลลงในปุ่ม Delete เพื่อทำเร้าท์ลิ้งค์ ลบข้อมูล ดังนี้
<td class="px-0">
<div class="d-flex align-items-center">
<a href="{{ route('admin.user.show', $user->id) }}" class="btn btn-success btn-sm">View</a>
<a href="{{ route('admin.user.edit', $user->id) }}" class="btn btn-warning btn-sm">Edit</a>
<form action="{{ route('admin.user.delete', $user->id) }}" method="post">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>
</div>
</td>
19. เพิ่มข้อมูลเร้าท์ในไฟล์ web.php ดังนี้
//ส่วน Admin
Route::name("admin.")->prefix("/admin")->middleware(["auth"])->group(function() {
Route::get('/show_users', [UserController::class, 'index'])->name('user.showusers');
Route::get('/create_users', [UserController::class, 'create'])->name('user.create');
Route::post('/add_users', [UserController::class, 'store'])->name('user.store');
Route::get('/show_users/{id}', [UserController::class, 'show'])->name('user.show');
Route::get('/edit_users/{id}', [UserController::class, 'edit'])->name('user.edit');
Route::patch('/update_users/{id}', [UserController::class, 'update'])->name('user.update');
Route::delete('/delete_users/{id}', [UserController::class, 'destroy'])->name('user.delete');
});
20. เพิ่มข้อมูลในไฟล์ UserController ส่วนฟังก์ชั่น destroy ดังนี้
public function destroy(string $id)
{
$user = User::find($id);
$user->delete();
return to_route('admin.user.showusers')->with('status', 'User-Data Deleted');
}
ทดสอบการใช้งาน โดยคลิ๊กที่ปุ่ม Delete ท้ายชื่อผู้ใช้ ต้องลบผู้ใช้รายนั้นๆได้ และอัพเดทจำนวนผู้ใช้ที่หน้าเดิมได้

