2015-01-26 17 views
5

Tôi đang viết một ứng dụng Laravel 4 có bảng users với thông tin liên hệ thông thường. Trong mô hình users của tôi, xác thực của tôi đối với email chỉ định 'email'=>'required|email|unique:users', hoạt động tốt khi đăng ký người dùng mới.Email xác nhận hợp lệ Laravel 4 hạn chế duy nhất

Câu hỏi của tôi là cách xử lý biểu mẫu chỉnh sửa người dùng-- khi biểu mẫu được gửi, tôi muốn giới hạn email duy nhất chỉ được kích hoạt nếu nó không giống với email cũ-- nếu không bạn có thể ' lưu hồ sơ của bạn, vì email (email của bạn) đã được sử dụng.

Cảm ơn

Trả lời

6

Tham số thứ ba với un quy tắc ique cho phép bạn chỉ định id của bản ghi để bỏ qua. Khi bạn đang chỉnh sửa người dùng, bạn muốn quy tắc xác thực duy nhất của mình bỏ qua giá trị chứa trong id của người dùng bạn đang chỉnh sửa.

'email'=>'required|email|unique:users,email,'.$userId 

Bạn có thể xem tài liệu về quy tắc xác thực here.

Phần khó nhất bạn sẽ gặp phải là tìm cách chỉnh sửa quy tắc của mình để cung cấp id của người dùng bạn đang chỉnh sửa. Tất cả phụ thuộc vào cách bạn thiết lập các quy tắc của mình và nơi bạn đang thực hiện xác thực của mình.

+0

Bạn luôn có thể concat 'Auth :: user() -> id' vì người dùng sẽ được đăng nhập để chỉnh sửa hồ sơ – Rafael

+2

Nhận id không nhất thiết phải là phần phức tạp. Nó đang tiêm id vào quy tắc mà một số người có vấn đề với, chỉ dựa trên cách thức hoặc nơi quy tắc của họ được xác định và sử dụng. Ví dụ: nếu quy tắc của bạn được xác định là thuộc tính tĩnh trên mô hình, bạn cần có một loại trình giữ chỗ trong quy tắc và sau đó là phương pháp để thay thế trình giữ chỗ đó bằng id cụ thể, như được mô tả trong [this] (http://stackoverflow.com/questions/28054979/laravel-4-form-validation-should-be-unique-on-update-form-but-not-if-current/28056267#28056267) câu hỏi/câu trả lời. – patricus

+1

Tôi thấy quan điểm của bạn nhưng trong trường hợp đó, OP sẽ chuyển ID tới hàm để hoàn thành các quy tắc xác thực. Hy vọng anh ta sẽ làm điều đó. Nhưng có vẻ như đây là con đường để đi, theo cách anh ấy thiết lập điều này. – Rafael

1

Unique Validation Cú pháp

unique:table,column,except,idColumn

Hãy thử này để loại trừ các email hiện

unique:'users', 'email', Auth::user()->email

+0

@ rafael-- cảm ơn nhưng đó không thực sự là ý của tôi. Nếu 'joe @ test.com' đăng ký một tài khoản mới, xác thực hoạt động tốt. Nếu sau đó anh ta gửi biểu mẫu chỉnh sửa và * không * thay đổi email của mình, xác thực không thành công vì email đang được sử dụng, do đó, nó không phải là duy nhất. – user101289

+0

Trong di chuyển và hoặc cơ sở dữ liệu, bạn nên đặt trường email thành ** chỉ mục duy nhất **. Bằng cách đó, cơ sở dữ liệu có thể xử lý loại điều này chứ không phải trình xác thực. '$ table-> unique ('email');' [Laravel Schema builder] (http://laravel.com/docs/4.2/schema#adding-indexes) – Rafael

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