1, 'name' => 'Nguyễn Văn An', 'email' => 'an.nguyen@example.com', 'age' => 20, 'gender' => 'male', 'class_name' => 'CNTT-K18A'], ['id' => 2, 'name' => 'Trần Thị Bích Ngọc', 'email' => 'ngoc.tran@example.com', 'age' => 19, 'gender' => 'female', 'class_name' => 'CNTT-K18A'], ['id' => 3, 'name' => 'Lê Hoàng Nam', 'email' => 'nam.le@example.com', 'age' => 17, 'gender' => 'male', 'class_name' => 'KTPM-K19B'], ['id' => 4, 'name' => 'Phạm Minh Châu', 'email' => 'chau.pham@example.com', 'age' => 21, 'gender' => 'female', 'class_name' => 'HTTT-K17A'], ['id' => 5, 'name' => 'Hoàng Đức Trọng', 'email' => 'trong.hoang@example.com','age' => 22, 'gender' => 'male', 'class_name' => 'CNTT-K18B'], ]; } /** * Bài 03: Hiển thị danh sách sinh viên từ mảng tĩnh */ public function staticIndex() { $students = $this->getStaticStudents(); $source = 'array'; return view('students.index', compact('students', 'source')); } /** * Bài 04, 06, 09, 10: Hiển thị danh sách sinh viên từ CSDL bằng Eloquent ORM + Phân trang */ public function index(Request $request) { $gender = $request->query('gender', ''); $query = Student::query()->orderBy('id', 'asc'); if (in_array($gender, ['male', 'female'], true)) { $query->where('gender', $gender); } // Phân trang 5 bản ghi mỗi trang (Bài 04) $students = $query->paginate(5)->withQueryString(); $source = 'database'; return view('students.index', compact('students', 'source', 'gender')); } /** * Bài 05: So sánh 2 nguồn dữ liệu "Mảng tĩnh (Array)" và "CSDL (Eloquent)" */ public function compare() { $staticStudents = $this->getStaticStudents(); $dbStudents = Student::orderBy('id', 'asc')->get(); return view('students.index', [ 'staticStudents' => $staticStudents, 'dbStudents' => $dbStudents, 'source' => 'compare', ]); } /** * Bài 08: Hiển thị form thêm mới sinh viên */ public function create() { return view('students.create'); } /** * Bài 08: Xử lý lưu sinh viên mới vào CSDL kèm Validate dữ liệu */ public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string|min:3|max:255', 'email' => 'required|email|max:255|unique:students,email', 'age' => 'required|integer|min:15|max:100', 'gender' => 'required|in:male,female', 'class_name' => 'nullable|string|max:50', ], [ 'name.required' => 'Vui lòng nhập họ và tên sinh viên.', 'name.min' => 'Họ và tên phải có ít nhất 3 ký tự.', 'email.required' => 'Vui lòng nhập địa chỉ email.', 'email.email' => 'Địa chỉ email không đúng định dạng.', 'email.unique' => 'Email này đã tồn tại trong hệ thống.', 'age.required' => 'Vui lòng nhập tuổi sinh viên.', 'age.integer' => 'Tuổi phải là một số nguyên hợp lệ.', 'age.min' => 'Tuổi sinh viên phải từ 15 trở lên.', 'gender.required' => 'Vui lòng chọn giới tính.', 'gender.in' => 'Giới tính không hợp lệ.', ]); Student::create($validated); return redirect() ->route('students.index') ->with('success', 'Đã thêm sinh viên mới thành công!'); } }