Tạo bởi Trần Văn Điêp|
Học Laravel

[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

Phản hồi từ học viên

5

Tổng 0 đánh giá

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

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