Mục Lục
Mục Lục
Hướng dẫn cài đặt môi trường [Bài Viết] Hướng dẫn cài composer [Bài Viết] Hướng dẫn tạo dự án Laravel đầu tay. [Bài Viết] Hướng dẫn cấu hình cơ sở dữ liệu và bật chức năng auth có sẵn trong Laravel [Bài Viết] Hướng dẫn cài theme Acacha AdminLTE cho Laravel [Bài Viết] Hướng dẫn tắt debug khi upload dự án laravel lên HOST Video Hướng dẫn cài đặt môi trường + tạo dự án + Tìm hiểu Route qua ví dụ - Lập trình Laravel Video Hướng dẫn cài đặt dự án Laravel + Cài đặt chức năng Auth (login + register) trong Laravel Tìm hiểu Route & View & Controller Video Tìm hiểu Route trong Laravel + Học lập trình laravel qua ví dụ Hello World, ax+b=0, Hiển thị danh sách sinh viên Video Tìm hiểu Route qua ví dụ quản lý sinh viên - Laravel Video Hướng dẫn tìm hiểu Route - Controller - View trong Laravel qua ví dụ Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Hello World trong Laravel Phần 1 Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Tính giai thừa trong Laravel Phần 2 Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ hiển thị danh sách sinh viên trong Laravel Phần 3 Tìm hiểu route + truyền dữ liệu từ controller tới view qua bài quản lý khách sạn- Lập trình Laravel Tìm hiểu route + truyền dữ liệu từ controller tới view qua bài quản lý sản phẩm - Lập trình Laravel Tìm hiểu Route - Controller - View trong Laravel Route: Giải phương trình bậc 2 (ax2 + bx + c = 0) bằng Laravel - Lập trình laravel BÀI TẬP LARAVEL CƠ BẢN - Lập Trình Laravel - Route → Controller → View QUẢN LÝ SINH VIÊN (KHÔNG DÙNG DATABASE) - Khóa học lập trình Laravel GET/POST trong Laravel Video Tìm hiểu GET/POST trong Laravel qua ví dụ nhập thông tin người dùng - Lập trình Laravel Quản lý sinh viên bằng Laravel - Lập trình Laravel Video Quản lý sinh viên bằng Laravel - Lập trình Laravel Layout - Blade Video Tìm hiểu Route - Blade (nhung css/js/photos) - cú pháp Blade - Xử lý GET/POST trong Laravel Video Hướng dẫn tìm hiểu layout trong Laravel - qua ví dụ tạo website tin tức - Lập Trình Laravel Bài Tập Học Layout thông qua clone website - Creative Theme Bootstrap Free - Lập trình Laravel Kết nối CSDL - Laravel Video Hướng dẫn tìm hiểu view, migration, seeder, db - laravel - Qua ví dụ quản lý sinh viên Video Học Laravel qua ví dụ thêm & hiển thị tài khoản người dung - DB::Insert - DB::get - Paginate - Khoá Học Laravel Tìm hiểu migration trong laravel - Lập trình laravel Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel Video - Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel Video Bài tập quản lý sách bằng Laravel - Full Source Code quản lý sách - Lập trình Laravel Ôn tập - Chương trình quản lý sách + danh mục sách - Lập trình PHP, Laravel Website thi trắc nghiệm lập trình Aptech - Lập trình laravel - Lập trình PHP Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel Video - Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel Video Hướng dẫn tim hiểu Pagination + model qua ví dụ quản lý sinh viên - Lập trình Laravel Tìm hiểu paginate trong laravel - Quản lý sản phẩm - Lập trình Laravel Ứng dụng Quản lý Sách trong Laravel Phân quyền - Chức năng nâng cao Video - Tìm hiểu Auth trong Laravel Video Phân Quyền-Hướng dẫn viết chức năng phân quyền người dùng theo role Lâp Trình PHP/Laravel Video API Resful Laravel - Hướng dẫn tạo API Resful bằng PHP/Laravel - Khóa học lập trình PHP/Laravel [Examination] Examination & Test + Website tra cứu luật giao thông đường bộ - Lập trình PHP - Lập trình Laravel [Examination] Bài tập ôn luyện kết thúc môn - Sử dụng Laravel + Ajax Thực Chiến: Web bán hàng Video Hướng dẫn tạo dự án super market - phần 1 - Laravel Video Hướng dẫn tạo dự án super market - phần 2- laravel Video Tạo giở hàng - học lập trình laravel qua project- Phần 3 - laravel Khóa Học Lập Trình Laravel Thực Chiến Video Source Code Dự Án - Thực Chiến Web Bán Hàng Video Phần 1 | Laravel | Web bán hàng - Giới thiệu công nghệ Video Phần 2 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL Video Phần 3 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL Video Phần 4 | Laravel | Thiết kế web bán hàng - Cài đặt dự án & Authetication & Migration CSDL Video Phần 5 | Laravel | Thực Chiến - Web Bán Hàng -Tích hợp template và chỉnh sửa trang đăng ký-đăng nhập Video Phần 6 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Role trong dự án Video Phần 7 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng quản lý người dung trong dự án Video Phần 8 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng quản lý danh mục Video Phần 9 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý sản phẩm Video Phần 10 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý tin tức Video Phần 11 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý phản hồi Video Phần 12 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý đơn hàng Video Phần 13 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng bảo mật trong dự án Video Phần 14 | Laravel | Thực Chiến - Web Bán Hàng - Trang Chủ & Phân Layout Video Phần 15 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Sản Phẩm Video Phần 16 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Tin Tức Video Phần 17 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Liên Hệ Unlisted Video Phần 18 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Chi Tiết Tin Tức Video Phần 19 | Laravel | Thực Chiến - Web Bán Hàng - FE Chi Tiết Sản Phẩm Video Phần 20 | Laravel | Thực Chiến - Web Bán Hàng - Trang giỏ hàng Video Phần 21 | Laravel | Thực Chiến - Web Bán Hàng - Trang thanh toán & hoàn thành thanh toán Video Phần 22 | Laravel | Final | Hướng dẫn cài đặt dự án từ source code mẫu
Laravel Tutorial

[Video] - Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel


HOẶC




B1. Phân tích database
- Tạo bảng.
- Fake du lieu

B2. Route
- Tao 1 file route > attendence.php => dky trong project
- Tao 1 controller => Attendence/AttendenceController
- Tao Route
	- /attendence/index => hien thi danh sach lich day trong ngay hom nay.
	- /attendence/view => Hien thi diem danh => sua diem danh

Mở bài

Trong thời đại số hóa mạnh mẽ, việc ứng dụng công nghệ vào giáo dục không còn là xu hướng mà đã trở thành nhu cầu thiết yếu. Một trong những bài toán phổ biến trong môi trường học tập hiện đại chính là quản lý điểm danh học viên – công việc tưởng đơn giản nhưng lại tốn nhiều thời gian nếu thực hiện thủ công. Đặc biệt, trong các trung tâm đào tạo lập trình như Aptech, nơi mỗi lớp học có lịch học linh hoạt, nhiều ca, nhiều giáo viên, thì việc xây dựng một chương trình quản lý điểm danh bằng Laravel là giải pháp tối ưu.

Bài viết này sẽ hướng dẫn chi tiết cách xây dựng hệ thống quản lý điểm danh trong Laravel, từ bước phân tích cơ sở dữ liệu (database), tạo route, xây dựng controller, đến hiển thị danh sách và cập nhật thông tin điểm danh. Qua đó, bạn sẽ nắm rõ cách vận dụng kiến thức về migration, seeder, route và controller trong Laravel để phát triển một ứng dụng thực tế.

Nếu bạn đang học lập trình PHP hoặc đang muốn trở thành một Laravel Developer chuyên nghiệp, thì đây chính là bài viết giúp bạn kết nối giữa lý thuyết và thực hành – với ví dụ cụ thể, logic dễ hiểu, và cách triển khai rõ ràng, có thể ứng dụng ngay trong các dự án thực tế tại Aptech hoặc bất kỳ trung tâm đào tạo nào.

Phân tích Database

1. Xác định yêu cầu hệ thống

Trước khi bắt tay vào viết code, chúng ta cần hiểu rõ mục tiêu của hệ thống quản lý điểm danh là gì. Hệ thống cần lưu trữ và xử lý các thông tin sau:

  • Danh sách lớp học (Class)

  • Danh sách học viên (Student)

  • Lịch dạy (Schedule)

  • Bảng điểm danh (Attendance)

Với mục tiêu này, ta cần thiết kế các bảng dữ liệu sao cho dễ mở rộng và đảm bảo tính toàn vẹn. Dưới đây là mô hình cơ bản:

Classes: id, name, start_date, end_date Students: id, name, email, class_id Schedules: id, class_id, teacher_name, date, time_start, time_end Attendances: id, schedule_id, student_id, status (present/absent/late), note

2. Tạo bảng bằng Migration

Laravel cung cấp công cụ migration để quản lý cơ sở dữ liệu như trong Git. Điều này giúp bạn dễ dàng theo dõi thay đổi và chia sẻ database schema với đồng đội.

Chạy lệnh sau để tạo migration cho bảng attendances:

php artisan make:migration create_attendances_table

Sau đó, mở file migration và thêm cấu trúc:

Schema::create('attendances', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('schedule_id'); $table->unsignedBigInteger('student_id'); $table->enum('status', ['present', 'absent', 'late'])->default('absent'); $table->string('note')->nullable(); $table->timestamps(); });

Cuối cùng, chạy lệnh:

php artisan migrate

3. Fake dữ liệu với Seeder

Để thuận tiện khi thử nghiệm, Laravel cho phép bạn tạo dữ liệu mẫu bằng seeder.
Chạy lệnh:

php artisan make:seeder AttendanceSeeder

Trong AttendanceSeeder.php, thêm:

public function run(): void { for ($i = 1; $i <= 50; $i++) { DB::table('attendances')->insert([ 'schedule_id' => rand(1, 5), 'student_id' => rand(1, 20), 'status' => ['present', 'absent', 'late'][rand(0, 2)], 'note' => 'Buổi học thử nghiệm', 'created_at' => now(), 'updated_at' => now(), ]); } }

Sau đó chạy:

php artisan db:seed --class=AttendanceSeeder

Vậy là cơ sở dữ liệu và dữ liệu mẫu đã sẵn sàng để hiển thị trong ứng dụng.

Route trong Laravel

1. Tạo file route riêng cho module điểm danh

Theo nguyên tắc Clean Architecture, mỗi module trong dự án nên có file route riêng để dễ quản lý.
Tạo file routes/attendence.php với nội dung:

use Illuminate\Support\Facades\Route; use App\Http\Controllers\Attendence\AttendenceController; Route::prefix('attendence')->group(function () { Route::get('/index', [AttendenceController::class, 'index'])->name('attendence.index'); Route::get('/view/{schedule_id}', [AttendenceController::class, 'view'])->name('attendence.view'); Route::post('/update/{id}', [AttendenceController::class, 'update'])->name('attendence.update'); });

Sau đó, đăng ký file này trong RouteServiceProvider:

public function boot() { $this->routes(function () { require base_path('routes/attendence.php'); }); }

2. Tạo Controller

Chạy lệnh sau để tạo controller:

php artisan make:controller Attendence/AttendenceController

Thêm nội dung:

namespace App\Http\Controllers\Attendence; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Attendance; use App\Models\Schedule; use Carbon\Carbon; class AttendenceController extends Controller { public function index() { $today = Carbon::today()->toDateString(); $schedules = Schedule::whereDate('date', $today)->get(); return view('attendence.index', compact('schedules')); } public function view($schedule_id) { $attendances = Attendance::where('schedule_id', $schedule_id)->get(); return view('attendence.view', compact('attendances')); } public function update(Request $request, $id) { $attendance = Attendance::findOrFail($id); $attendance->status = $request->status; $attendance->note = $request->note; $attendance->save(); return redirect()->back()->with('success', 'Cập nhật điểm danh thành công!'); } }

Xây dựng giao diện hiển thị danh sách điểm danh

1. Giao diện danh sách buổi học trong ngày

Tạo file resources/views/attendence/index.blade.php:

@extends('layouts.app') @section('content') <div class="container"> <h2>Danh sách lịch dạy hôm nay</h2> <table class="table table-bordered"> <thead> <tr> <th>Tên lớp</th> <th>Giáo viên</th> <th>Thời gian</th> <th>Thao tác</th> </tr> </thead> <tbody> @foreach($schedules as $item) <tr> <td>{{ $item->class->name }}</td> <td>{{ $item->teacher_name }}</td> <td>{{ $item->time_start }} - {{ $item->time_end }}</td> <td> <a href="{{ route('attendence.view', $item->id) }}" class="btn btn-primary">Điểm danh</a> </td> </tr> @endforeach </tbody> </table> </div> @endsection

2. Giao diện điểm danh chi tiết

Tạo file resources/views/attendence/view.blade.php:

@extends('layouts.app') @section('content') <div class="container"> <h2>Danh sách học viên</h2> <form method="POST" action="{{ route('attendence.update', $attendance->id) }}"> @csrf <table class="table table-striped"> <thead> <tr> <th>Tên học viên</th> <th>Trạng thái</th> <th>Ghi chú</th> <th>Lưu</th> </tr> </thead> <tbody> @foreach($attendances as $attendance) <tr> <td>{{ $attendance->student->name }}</td> <td> <select name="status" class="form-select"> <option value="present" {{ $attendance->status == 'present' ? 'selected' : '' }}>Có mặt</option> <option value="absent" {{ $attendance->status == 'absent' ? 'selected' : '' }}>Vắng</option> <option value="late" {{ $attendance->status == 'late' ? 'selected' : '' }}>Muộn</option> </select> </td> <td><input type="text" name="note" value="{{ $attendance->note }}" class="form-control"></td> <td><button type="submit" class="btn btn-success">Cập nhật</button></td> </tr> @endforeach </tbody> </table> </form> </div> @endsection

Một số lời khuyên khi phát triển module điểm danh

  • Tối ưu dữ liệu: Nên sử dụng Eloquent Relationships (belongsTo, hasMany) để truy xuất dữ liệu hiệu quả hơn.

  • Bảo mật route: Sử dụng middleware auth để đảm bảo chỉ giáo viên/nhân viên được phép truy cập.

  • Thêm pagination: Khi danh sách học viên quá dài, nên thêm phân trang bằng paginate(10).

  • Dễ mở rộng: Có thể thêm tính năng xuất file Excel hoặc PDF để báo cáo.

  • Kiểm tra logic: Viết test unit cho từng chức năng quan trọng để đảm bảo độ ổn định của hệ thống.

Kết luận

Qua bài viết này, bạn đã nắm được toàn bộ quy trình xây dựng chương trình quản lý điểm danh Aptech bằng Laravel, từ khâu thiết kế database, tạo route, controller, cho đến hiển thị giao diện. Dự án này không chỉ giúp bạn hiểu rõ cách Laravel hoạt động mà còn giúp bạn rèn luyện kỹ năng lập trình PHP/Laravel thực chiến, ứng dụng được trong mọi dự án đào tạo hoặc doanh nghiệp.

Nếu bạn là sinh viên Aptech hoặc người mới học lập trình, hãy bắt đầu thực hành ngay hôm nay.
Hãy biến những dòng code nhỏ này thành ứng dụng quản lý thực tế của riêng bạn — bước đầu tiên để trở thành một Laravel Developer chuyên nghiệp!

Source Code:

https://github.com/tranvandiep/T1907A-Laravel

Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel



Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó

×