2015-08-19 19 views
9

Tôi có các biểu mẫu gửi các mảng đa chiều. Giống như:Laravel 5: Yêu cầu xác nhận hợp lệ mảng đa chiều

slide[1][title] 
slide[2][title] 

Bây giờ tôi sử dụng lớp Yêu cầu để xác định quy tắc của tôi. Làm thế nào tôi có thể lặp qua tất cả các mục mảng trong lớp này. Tôi đã thử:

public function rules() 
{ 
    return [ 
     'id' => 'required', 
     'slide' => 'array|min:1', 
     'slide.*.title' => 'required|max:255', 
     'slide.*.description' => 'required|max:255', 
    ]; 
} 

Nhưng nó không hoạt động.

+1

Hãy ghi nhớ rằng [bạn có thể trả lời câu hỏi của riêng bạn] (http://stackoverflow.com/help/self-answer). Không đăng giải pháp trong câu hỏi của bạn. – totymedli

Trả lời

6

Tuyên bố từ chối trách nhiệm: Giải pháp này được đăng trong câu hỏi bởi Alexej. Vì câu trả lời không nên được chia sẻ trong nội dung câu hỏi và OP dường như không hoạt động, tôi trả lời câu trả lời của mình dưới dạng wiki cộng đồng cho người đọc trong tương lai:

Tôi đã tìm thấy giải pháp bằng cách lấy mảng và vòng lặp qua đó.

public function rules() 
{ 
    $rules = [ 
     'id' => 'required', 
     'slide' => 'array|min:1', 
    ]; 
    foreach($this->request->get('slide') as $key => $val){ 
     $rules['slide.'.$key.'.title'] = 'required|max:255'; 
     $rules['slide.'.$key.'.description'] = 'required|max:255'; 
    } 
    return $rules; 
} 
0

Không có quy tắc xác thực được định cấu hình trước cho các mảng đa chiều. Cách easist là thực hiện xác thực mảng bên trong bộ điều khiển của bạn.

Vấn đề là khi bạn sử dụng mảng đa chiều để lưu trữ các giá trị duy nhất, sau đó logic là sai và những gì bạn nên sửa là logic của bạn, không phải khung. Ví dụ: tôi thấy rất nhiều thời gian gửi thông tin đăng nhập của người dùng như $ var ['login'] ['pass'] và $ var ['login'] ['username'], nó có thể được dịch dễ dàng sang 2 biến khác nhau, điều này sẽ có ý nghĩa hơn. Trong trường hợp bạn biết những giá trị đó nên là gì và bạn cảm thấy tự tin rằng xác nhận có thể là một cái gì đó chung cho tất cả các giá trị khác nhau, bạn có thể tạo trình xác nhận tùy chỉnh (đọc tài liệu xác nhận phiên bản laravel của bạn).

Đề cập đến mã của bạn Tôi nghĩ mảng nhiều chiều được khai báo giống như trong html slide[]['title'] của bạn. Sẽ rất hữu ích khi biết cách bạn gửi các tham số đó đến chương trình phụ trợ, sau đó có thể cung cấp cho bạn một đầu mối về cách thiết lập xác thực.

Các vấn đề liên quan