Quay lại

Validating sự phụ thuộc attributes trong Laravel request Chuyên mục PHP và Laravel    2023-07-28    331 Lượt xem    79 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Validating sự phụ thuộc attributes trong Laravel request

Có một kịch bản trong ứng dụng của bạn, trong đó có một số trường trong form của bạn phụ thuộc vào state (trạng thái) của một trường khác.

Chẳng hạn, hãy tưởng tượng một form có checkbox has_doctor_appointment, khi được chọn, checkbox này sẽ bật/tắt thông tin đầu vào về appointment_date và doctor_name. Người dùng có thể chọn checkbox, điền ngày và sau đó bỏ chọn checkbox. Đầu vào date không còn hiển thị, nhưng vẫn chứa một giá trị. Vì vậy, khi bạn gửi biểu mẫu, ngay cả khi đầu vào không hiển thị, giá trị vẫn được gán.

PR #30835 cho Laravel 6.x đã giải quyết vấn đề này. Trích dẫn từ chính PR

The goal of this PR is to make it easy to exclude attributes from a request based on the value of other attributes. This is useful when having to validate data from a form where certain checkboxes hide or show other inputs.

Đối với điều này, bạn cần sử dụng quy tắc exclude_if hoặc exclude_unless trên các trường phụ thuộc.

exclude_if & exclude_unless rules

Quy tắc xác thực exclude_if kiểm tra xem trường được xác thực có bị loại trừ khỏi dữ liệu yêu cầu được trả về bởi các phương thức validate validated nếu trường otherfield bằng giá trị.

Đây là cách bạn viết validation rule.

'appointment_date' => 'exclude_if:has_appointment,false|required|date'

Và đây là ví dụ đầy đủ từ PR. Đối với dữ liệu bài viết như dưới đây:

// Post data:
{"has_appointment": false, "appointment_date": "2019-12-13"}

exclude_if sẽ được áp dụng như thế này.

public function post(Request $request)
{
    $data = $request->validate([
        'has_doctor_appointment' => 'required|bool',
        'appointment_date' => 'exclude_if:has_appointment,false|required|date',
        'doctor_name' => 'exclude_if:has_appointment,false|required|string',
    ]);

    // $data === ['has_appointment' => false]

    SomeModel::create($data);
}

Ở đây, trong ví dụ này, appointment_date doctor_name sẽ bị bỏ qua nếu giá trị của has_doctor_appointment được set thành false.

Tương tự, Quy tắc xác exclude_unless khi kiểm tra xem trường được xác thực có bị loại trừ khỏi dữ liệu request được trả về bởi các phương thức validate và validated hay không, trừ khi anotherfield’s  field khác bằng giá trị.

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday