Laravel xác thực mảng id

Làm cách nào tôi có thể sử dụng trình xác thực để kiểm tra xem từng thứ này có tồn tại trong một bảng không?

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];

Giải pháp tốt nhất

Xác thực của bạn như được viết sẽ hoạt động. Nếu xác thực tồn tại được sử dụng với một mảng, nó sẽ tự động sử dụng

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
2 cho truy vấn tồn tại

Vì vậy, với sự xác thực của bạn như bạn đã viết, việc xác thực sẽ nhận được số lượng bản ghi

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
3 trong đó trường
$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
4 nằm trong danh sách id được cung cấp bởi đầu vào
$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
5 của bạn

Do đó, nếu

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
5 của bạn là
$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
7, thì nó sẽ lấy số ở vị trí của
$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
8 và so sánh số đó với số phần tử trong mảng
$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
5 của bạn [là 4]. Nếu số lượng truy vấn >= số lượng mảng, quá trình xác thực sẽ vượt qua

Hai điều cần cẩn thận ở đây. nếu cột bạn đang kiểm tra không phải là duy nhất hoặc nếu dữ liệu mảng của bạn có các phần tử trùng lặp

Nếu cột bạn đang kiểm tra không phải là duy nhất, thì có thể số lượng truy vấn của bạn sẽ >= số lượng mảng, nhưng không phải tất cả id từ mảng của bạn đều thực sự tồn tại. Nếu mảng của bạn là

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
7, nhưng bảng của bạn có bốn bản ghi với id 1, quá trình xác thực sẽ vượt qua mặc dù các bản ghi với id 2, 3 và 4 không tồn tại

Đối với các giá trị mảng trùng lặp, nếu mảng của bạn là

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
11, nhưng bạn chỉ có một bản ghi có id là 1, thì việc xác thực sẽ không thành công vì số lượng truy vấn sẽ là 1, nhưng số lượng mảng của bạn là 2

Để khắc phục hai cảnh báo này, bạn có thể thực hiện xác thực phần tử mảng riêng lẻ. Quy tắc của bạn sẽ trông giống như

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
1

Hãy nhớ rằng mỗi phần tử sẽ được xác thực riêng lẻ, vì vậy nó sẽ chạy một truy vấn mới cho từng phần tử trong mảng

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
12

Giải pháp liên quan

Php – Cách thiết lập quyền truy cập tệp cho Laravel

Chỉ để nêu rõ ràng cho bất cứ ai xem cuộc thảo luận này. nếu bạn cấp quyền 777 cho bất kỳ thư mục nào của mình, bạn đang cho phép BẤT CỨ AI đọc, viết và thực thi bất kỳ tệp nào trong thư mục đó. điều này có nghĩa là bạn đã cấp cho BẤT KỲ AI [bất kỳ tin tặc hoặc kẻ độc hại nào trên toàn thế giới] quyền tải lên BẤT KỲ tệp, vi-rút hoặc bất kỳ tệp nào khác và SAU ĐÓ thực thi tệp đó

NẾU BẠN ĐANG ĐẶT PHÉP THƯ MỤC CỦA MÌNH THÀNH 777, BẠN ĐÃ MỞ MÁY CHỦ CỦA MÌNH CHO BẤT KỲ AI CÓ THỂ TÌM THƯ MỤC ĐÓ. Đủ rõ ràng chưa ???. ]

Về cơ bản có hai cách để thiết lập quyền sở hữu và quyền của bạn. Bạn tự trao quyền sở hữu hoặc đặt máy chủ web làm chủ sở hữu của tất cả các tệp

Máy chủ web với tư cách là chủ sở hữu [cách mà hầu hết mọi người làm và cách của tài liệu Laravel]

giả sử dữ liệu www [có thể là thứ khác] là người dùng máy chủ web của bạn

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
4

nếu bạn làm điều đó, máy chủ web sở hữu tất cả các tệp và cũng là nhóm và bạn sẽ gặp một số vấn đề khi tải tệp lên hoặc làm việc với tệp qua FTP, vì máy khách FTP của bạn sẽ đăng nhập với tư cách là bạn chứ không phải máy chủ web của bạn, vì vậy hãy thêm

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
5

Tất nhiên, điều này giả định rằng máy chủ web của bạn đang chạy dưới dạng dữ liệu www [mặc định của Homestead] và người dùng của bạn là ubuntu [thật mơ hồ nếu bạn đang sử dụng Homestead]

Sau đó, bạn đặt tất cả các thư mục của mình thành 755 và các tệp của bạn thành 644. SET quyền đối với tệp

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
6

SET quyền thư mục

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
7

Người dùng của bạn là chủ sở hữu

Tôi muốn sở hữu tất cả các thư mục và tệp [nó giúp làm việc với mọi thứ dễ dàng hơn nhiều], vì vậy, hãy truy cập thư mục gốc laravel của bạn

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
8
$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
9

Sau đó, tôi cấp cho cả bản thân và máy chủ web quyền

$validator = Validator::make[$request->all[], [
    'array' => 'required|exists:users,id'
]];
0

Sau đó cấp cho máy chủ web quyền đọc và ghi vào bộ nhớ và bộ đệm

Cho dù bạn thiết lập nó theo cách nào, thì bạn cần cấp quyền đọc và ghi cho máy chủ web để lưu trữ, bộ đệm và bất kỳ thư mục nào khác mà máy chủ web cũng cần tải lên hoặc ghi [tùy thuộc vào tình huống của bạn], vì vậy hãy chạy các lệnh từ bashy ở trên

Làm cách nào để xác thực đầu vào mảng trong laravel?

May mắn thay, Laravel cung cấp một cách đơn giản để xác thực mảng và đầu vào mảng lồng nhau bằng cách sử dụng ký hiệu dấu chấm và ký tự * . Ký tự * thay thế số lần lặp của phần tử trong mảng. Nó cũng khá hữu ích khi chúng ta có nhiều tổ hợp phức tạp hơn đang diễn ra.

Làm cách nào để xác thực khóa mảng trong laravel?

Bạn có thể thực hiện việc này bằng cách thêm trình xác thực tùy chỉnh . Xem thêm. https. // ấu trùng. com/docs/5. 2/validation#custom-validation-rules. Ví dụ. \Validator. mở rộng['integer_keys', function[$attribute, $value, $parameters, $validator] { return is_array[$value] && count[array_filter[array_keys[$value], 'is_string']] === 0; }]

Làm cách nào để xác thực các từ chính xác trong laravel?

Để xác thực các từ chính xác, bạn có thể sử dụng Quy tắc. trong phương thức có sẵn với laravel . Sử dụng quy tắc. trong phương thức, bất kỳ giá trị nào được cung cấp bởi quy tắc này phải được khớp nếu không nó sẽ thất bại.

Làm cách nào để tùy chỉnh thông báo lỗi xác thực trong laravel?

Để khắc phục điều này, chúng ta có thể tùy chỉnh các thông báo lỗi bằng cách chuyển một mảng thứ hai làm đối số, chứa các khóa được tạo bằng cách sử dụng tên của tham số, dấu chấm và sau đó là tên của . - the value will be the error message we want to display.

Chủ Đề