2017-06-28 30 views
5

Tôi có đầu vào $data =['identifier' = 'xxxxxxxxxx']; và muốn lưu encrypt($data['identifier']) vào bảng info cột chính id.cách sử dụng quy tắc xác thực của laravel trong quy tắc xác thực tùy chỉnh?

Tôi đã xác thực trước khi lưu. Quy tắc unique:info, id không phù hợp ở đây, vì vậy tôi muốn viết quy tắc xác thực tùy chỉnh. Và trong quy tắc xác thực tùy chỉnh, tôi encrypt() giá trị trước tiên, sau đó sử dụng quy tắc xác thực unique.

Tôi biết cách viết quy tắc xác thực tùy chỉnh, nhưng cách sử dụng quy tắc xác thực unique trong quy tắc xác thực tùy chỉnh của tôi?

+1

Liệu https://laravel.com/docs/5.4/validation#custom-validation-rules không đủ? – ceejayoz

+0

@ceejayoz vui lòng đọc câu hỏi của tôi nhiều hơn. Ở đây tôi không viết quy tắc xác thực tùy chỉnh. Tôi muốn mở rộng quy tắc duy nhất. –

+0

Giá trị ban đầu của 'id' là gì? nó 'int' sau đó nó sẽ được mã hóa ?! – SaidbakR

Trả lời

2

Rules "độc đáo" và "tồn tại" sử dụng lớp DatabasePresenceVerifier. Vì vậy, bạn không cần thực sự mở rộng quy tắc duy nhất, chỉ cần truy cập trình xác minh hiện diện này. Ví dụ:

Validator::extend('encrypted_unique', function ($attribute, $value, $parameters, $validator) { 
    list ($table, $column, $ignore_id) = $parameters; // or hard-coded if fixed 
    $count = $validator->getPresenceVerifier()->getCount($table, $column, encrypt($value), $ignore_id); 
    return $count === 0; 
}); 

Sau đó, bạn có thể sử dụng nó như bình thường:

'identifier' => "encrypted_unique:table,column,$this_id" 
1

Giả sử bạn có một ModuleRequest rằng xác nhận đầu vào của bạn, bạn có thể viết phương pháp này trong lớp này

protected function validationData() 
{ 
    $all = parent::validationData(); 
    $all['email'] = encrypt($all['email']); 
    return $all; 

} 
+0

Tôi biết điều này hoạt động. Tôi muốn sử dụng 'encrypt()' này trong quy tắc hợp lệ như đã nêu trong câu hỏi của mình. –

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