Các tập tin Blade template cho phép chúng ta sử dụng các điều kiện logic như @if hoặc @isset. Tuy nhiên, cần đảm bảo rằng chúng ta không quá lạm dụng những điều kiện logic này bằng cách đưa quá nhiều điều kiện logic vào tập tin Blade của chúng ta.
@if
@isset
Các tập tin Blade nằm trong thư mục resources/views thực hiện chức năng hiển thị trong mô hình MVC của Laravel. Điều này có nghĩa nó chỉ thực hiện chức năng hiển thị mà thôi, do đó, các điều kiện hoặc xử lý dữ liệu đã được thực hiện ở Model hoặc Controller.
resources/views
Mặc dù, một số dữ liệu mà bạn gửi qua views có vẻ bắt buộc/hiển nhiên, chẳng hạn như giá trị boolean hoặc chuỗi từ một Model, hoặc các dữ liệu khác không được cắt bớt hoặc giảm lại. Trong trường hợp này, bạn phải tính toán ở nơi khác và trả kết quả về cho views
views
boolean
Hãy xem một ví dụ bên dưới đây:
Giả sử bạn cần một chế độ xem với các điều kiện như sau:
Chúng ta có một cột đánh dấu xác nhận xem họ có phải là một tài khoản trả phí hay không, và chúng ta dùng Paypal để thanh toán, vì vậy người dùng sẽ có một mã token từ Paypal được lưu trong hồ sơ tài khoản của họ nếu đã thiết lập xong.
Có lẽ chúng ta sẽ làm như sau trong Controller (yeah nó có thể đúng hoặc sai với bạn)
return view('path.to.view', [ 'user' => $user, ]);
Nếu chúng ta lấy thông tin người dùng, vậy tại sao chúng ta không lấy toàn bộ thông tin của người dùng ra?
Điều này thật tệ vì một số lý do:
$user
Model
Controller
Views
Vậy, như ví dụ bên dưới đây thì sao?
return view('path.to.view', [ 'is_premium' => $user->is_premium, 'paypal_token' => $user->paypal_token, ]);
Trong tập tin Blade có thể bạn sẽ viết thế này:
@if($paypal_token) <h2>Thông tin thanh toán</h2> ...
Bây giờ chúng ta như đang chơi với lửa vậy! Vì chúng ta đang gửi dữ liệu bí mật qua cho views và chúng ta đang hi vọng rằng nó sẽ không bao giờ được hiển thị (bởi vì token Paypal rất quan trọng). Ngoài ra, nếu chúng ta thay đổi nhà cung cấp thanh toán từ Paypal sang Momo hay Napas chẳng hạn, thì chúng ta phải thay đổi luôn tên của biến này, không thể để $paypal_token được vì nó sẽ gây nhầm lẫn với các dịch vụ thanh toán khác, vì khi bạn để như vậy, mặc dù nó cùng tên là $paypal_token, nhưng giá trị của nó lại khác nhau, điều này sẽ thật tệ đến một lúc nào đó, tin tui đi!
$paypal_token
Vậy, hãy thử cách sau:
return view('path.to.view', [ 'is_premium' => $user->is_premium, 'has_billing_account' => !empty($user->paypal_token), ]);
Và ở views chúng ta có thể kiểm tra như sau:
@if($has_billing_account) <h2>Thông tin thanh toán</h2> ...
Và kết quả, chúng ta không gửi bất kỳ thông tin bảo mật nào sang views, nó rất dễ để đọc, và không yêu cầu tệp blade của chúng ta phải hiểu chi tiết về đối tượng. Thật tuyệt vời.
Đến đây thì mẹo thứ ba đã kết thúc, rất cảm ơn bạn đã chịu khó đọc đến đây, nếu có chỗ nào khó hiểu, bạn có thể để lại bình luận, mình sẽ trả lời lại cho các bạn trong sự hiểu biết của mình nhé. Hẹn gặp lại bạn trong mẹo tiếp theo.