Nay tìm hiểu về Rescue() trong Laravel, thông thường ta hay sử dụng Try/Catch xử lý các ngoại lệ khi có lỗi trong câu lệnh. Nay chia sẻ với mọi người các dùng của Rescue() nó rất hay
rescue(callable $callback, $rescue = null, $report = true)
rescue : được thiết kế để thực thi một đoạn code và "cứu" nó khỏi việc ném ra ngoại lệ.ư
$callback: Hàm chứa code có thể gây ra ngoại lệ.
$rescue: Giá trị hoặc hàm callback sẽ được trả về nếu có ngoại lệ xảy ra.
$report: Nếu true, ngoại lệ sẽ được báo cáo (log). Nếu false, ngoại lệ sẽ bị "nuốt" mà không ghi log.
Chú ý : Mặc dù rescue() ngăn ngoại lệ được ném ra, nó không ngăn việc ghi log từ các phần khác của ứng dụng.
Cách sử dụng Try/Cath , thường hay dùng
$user_id = $request->id; /* Khi chúng ta sử dụng Try/Catch xử lý ngoại lệ */ try { // ✅ Lấy thông tin user từ Id $user = User::findOrFail($user_id); return Response()->json($user); } catch (ModelNotFoundException $e) { //👉 getModel (): Lấy mô hình Eloquent bị ảnh hưởng get //👉 getIds() : Nhận ID mô hình Eloquent bị ảnh hưởng. if($e instanceof Illuminate\Database\Eloquent\ModelNotFoundException){ return Response()->json(['messages'=>$e->getModel(),'array'=>json_encode($e->getIds())]); } }
Cách ta sử dụng Rescue()
$result = rescue(function () use ($request) { // Giả sử chúng ta đang truy vấn bảng 'users' $user_id = $request->id; return User::findOrFail($user_id); }, function($e) use ($request){ // ✅Xử lý ngoại lệ ở đây // ví dụ : tạo một session lưu thông báo lỗi // 🔑 request()->session()->flash('unsuccessMessage', 'Failed get user id.'.$request->id); if($e instanceof Illuminate\Database\Eloquent\ModelNotFoundException){ return Response()->json(['messages'=>$e->getModel(),'array'=>json_encode($e->getIds())]); } },false); return Response()->json(['user' => $result]);
Với dụng sử dụng Rescue() giúp cho đoạn code của ta dễ nhìn hơn, dễ kiểm sót được đoạn code.