Trong giờ hành chính tối nay, Sheetal đã đặt ra một vấn đề thú vị- vì giải pháp này cũng có thể hữu ích cho những người khác nên tôi muốn ghi lại nó
Sheetal đang hướng đến việc giữ lại tùy chọn đã chọn của trình đơn thả xuống cả khi xác thực không thành công và gửi biểu mẫu thành công [i. e. vượt qua xác nhận]
Điều này rất phức tạp vì có hai cách mà chế độ xem của chúng tôi có thể có quyền truy cập vào dữ liệu biểu mẫu
- Qua
old
nếu xác thực không thành công - Thông qua việc chuyển rõ ràng tới chế độ xem [sử dụng _______________] của việc gửi biểu mẫu đã thành công
Các giải pháp sau đây dành riêng cho danh sách thả xuống, nhưng các nguyên tắc tương tự có thể được áp dụng cho các loại đầu vào biểu mẫu khác
Giải pháp 1 [Xấu]
Giải pháp ban đầu sử dụng toán tử bậc ba lồng nhau [dài dòng và khó phân tích cú pháp]
Select ACT SAT
Để hiểu rõ hơn về súp mã này, đây là phần có liên quan ở dạng mở rộng
# If validation failed, we can get activityType using `old` if[old['activityType'] == 'ACT'] { echo 'selected'; # Otherwise, see if $activityType was passed to the view and if it matches this option [ACT] } elseif[isset[$activityType] && [$activityType == 'ACT']] { echo 'selected'; } else { echo ''; }
Giải pháp 2 [Tốt hơn]
Giải pháp cải tiến giúp loại bỏ toán tử bậc ba lồng nhau
Select ACT SAT
Một lần nữa, đây là phần có liên quan ở dạng mở rộng
if[[old['activityType'] == 'ACT'] or [isset[$activityType] and $activityType == 'ACT']] { echo 'selected'; } else { echo ''; }
Giải pháp 3 [Tốt nhất]
Giải pháp tối ưu mà
- tận dụng thực tế là phương thức
old
có thể được chuyển một giá trị mặc định dưới dạng tham số thứ hai và - sử dụng php để hợp lý hóa việc kiểm tra xem liệu
# If validation failed, we can get activityType using `old` if[old['activityType'] == 'ACT'] { echo 'selected'; # Otherwise, see if $activityType was passed to the view and if it matches this option [ACT] } elseif[isset[$activityType] && [$activityType == 'ACT']] { echo 'selected'; } else { echo ''; }
0 có được thiết lập hay không
Select ACT SAT
tiền thưởng
Nếu trình đơn thả xuống của bạn có nhiều tùy chọn, cuối cùng bạn sẽ lặp lại cùng một dòng mã cho từng tùy chọn, điều này không lý tưởng
Một cách để hợp lý hóa mọi thứ là cung cấp một mảng cho chế độ xem của bạn với các tùy chọn thả xuống, e. g
$activityTypes = ['ACT', 'SAT];
Với dữ liệu có sẵn trong chế độ xem, bạn có thể tạo tùy chọn thả xuống bằng vòng lặp
Select
@foreach[$activityTypes as $type]
{{ $type }}
@endforeach
Không thực sự cần thiết trong ví dụ này, vì chỉ có hai tùy chọn, nhưng có điều gì đó cần suy nghĩ đối với danh sách thả xuống lớn hơn