Trong Laravel tất cả các loại trừ đều được kiểm soát bởi lớp appExceptionsHandler. Class này bao gồm 2 phương thức report và render.
Phương thức report()
Phương thức report được sử dụng để report hoặc lưu log những ngoại lệ. Nó cũng được sử dụng để gửi log của các ngoại lệ tới service bên trong như là Sentry, Bugsnag..v…v…
>>> Xem full Series về Laravel Framework <<<
Phương thức render()
Phương thức render() được sử dụng để hoàn trả một ngoại lệ vào một phản hồi HTTP mà sẽ được gửi lại trình duyệt.
Bên cạnh 2 phương thức này thì lớp appExceptionsHandler cũng bao gồm một thuộc tính quan trọng gọi là “$dontReport”. Thuộc tính này sẽ cần một mảng của kiểu ngoại lệ không được lưu log lại.
Các ngoại lệ HTTP
Nhiều exception miêu tả những code HTTP lỗi như là 404, 500..v..v… Để tạo ra những phản hồi này ở bất cứ đâu trong ứng dụng của bạn, bạn có thể dùng phương thức abort() như sau:
1
|
abort(404)
|
Trang lỗi tùy biến
Laravel giúp chúng ta làm công việc này cực kì dễ dàng để sử dụng các trang lỗi cho mỗi code lỗi riêng biệt. Ví dụ, nếu bạn muốn thiết kế những trang tùy biến cho lỗi 404, bạn có thể tạo một view tại resources/views/errors/404.blade.php. Bằng cách tương tự, nếu bạn muốn thiết kế trang lỗi cho lỗi 500, nó cần được lưu trong resources/views/errors/500.blade.php.
Lời khuyên: Lập trình PHP là kiến thức bắt buộc phải có để học Laravel
Ví dụ
Bước 1 – Thêm đoạn sau vào app/Http/routes.php.
1
2
3
|
Route::get(‘/error’,function(){
abort(404);
});
|
Bước 2 – Tạo một file View gọi là resources/views/errors/404.blade.php và sao chép code sau vào file đó.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<span class=“dec”><!DOCTYPE html></span>
<span class=“tag”><html></span>
<span class=“tag”><head></span>
<span class=“tag”><title></span><span class=“pln”>404</span><span class=“tag”></title></span>
<span class=“tag”><link</span> <span class=“atn”>href</span> <span class=“pun”>=</span> <span class=“atv”>“https://fonts.googleapis.com/css?family=Lato:100”</span> <span class=“atn”>rel</span> <span class=“pun”>=</span> <span class=“atv”>“stylesheet”</span>
<span class=“atn”>type</span> <span class=“pun”>=</span> <span class=“atv”>“text/css”</span><span class=“tag”>></span>
<span class=“tag”><style></span><span class=“pln”>
html</span><span class=“pun”>,</span><span class=“pln”> body </span><span class=“pun”>{</span><span class=“pln”>
height</span><span class=“pun”>:</span> <span class=“lit”>100</span><span class=“pun”>%;</span>
<span class=“pun”>}</span><span class=“pln”>
body </span><span class=“pun”>{</span><span class=“pln”>
margin</span><span class=“pun”>:</span> <span class=“lit”>0</span><span class=“pun”>;</span><span class=“pln”>
padding</span><span class=“pun”>:</span> <span class=“lit”>0</span><span class=“pun”>;</span><span class=“pln”>
width</span><span class=“pun”>:</span> <span class=“lit”>100</span><span class=“pun”>%;</span><span class=“pln”>
color</span><span class=“pun”>:</span> <span class=“com”>#B0BEC5;</span><span class=”pln”>
display</span><span class=“pun”>:</span><span class=“pln”> table</span><span class=“pun”>;</span><span class=“pln”>
font</span><span class=“pun”>–</span><span class=“pln”>weight</span><span class=“pun”>:</span> <span class=“lit”>100</span><span class=“pun”>;</span><span class=“pln”>
font</span><span class=“pun”>–</span><span class=“pln”>family</span><span class=“pun”>:</span> <span class=“str”>‘Lato’</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“pun”>.</span><span class=“pln”>container </span><span class=“pun”>{</span><span class=“pln”>
text</span><span class=“pun”>–</span><span class=“pln”>align</span><span class=“pun”>:</span><span class=“pln”> center</span><span class=“pun”>;</span><span class=“pln”>
display</span><span class=“pun”>:</span><span class=“pln”> table</span><span class=“pun”>–</span><span class=“pln”>cell</span><span class=“pun”>;</span><span class=“pln”>
vertical</span><span class=“pun”>–</span><span class=“pln”>align</span><span class=“pun”>:</span><span class=“pln”> middle</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“pun”>.</span><span class=“pln”>content </span><span class=“pun”>{</span><span class=“pln”>
text</span><span class=“pun”>–</span><span class=“pln”>align</span><span class=“pun”>:</span><span class=“pln”> center</span><span class=“pun”>;</span><span class=“pln”>
display</span><span class=“pun”>:</span> <span class=“kwd”>inline</span><span class=“pun”>–</span><span class=“pln”>block</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“pun”>.</span><span class=“pln”>title </span><span class=“pun”>{</span><span class=“pln”>
font</span><span class=“pun”>–</span><span class=“pln”>size</span><span class=“pun”>:</span> <span class=“lit”>72px</span><span class=“pun”>;</span><span class=“pln”>
margin</span><span class=“pun”>–</span><span class=“pln”>bottom</span><span class=“pun”>:</span> <span class=“lit”>40px</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“tag”></style></span>
<span class=“tag”></head></span>
<span class=“tag”><body></span>
<span class=“tag”><div</span> <span class=“atn”>class</span> <span class=“pun”>=</span> <span class=“atv”>“container”</span><span class=“tag”>></span>
<span class=“tag”><div</span> <span class=“atn”>class</span> <span class=“pun”>=</span> <span class=“atv”>“content”</span><span class=“tag”>></span>
<span class=“tag”><div</span> <span class=“atn”>class</span> <span class=“pun”>=</span> <span class=“atv”>“title”</span><span class=“tag”>></span><span class=“pln”>404 Error</span><span class=“tag”></div></span>
<span class=“tag”></div></span>
<span class=“tag”></div></span>
<span class=“tag”></body></span>
<span class=“tag”></html></span>
|
Bước 3 – Vào URL sau để test event
http://localhost:8000/error
Bước 4 – Sau khi vào URL, bạn sẽ thấy như sau: