2015-01-26 15 views
5

Her zamanki iletişim bilgisine sahip bir users tablosuna sahip bir Laravel 4 uygulaması yazıyorum. Benim users modelimde, e-posta için doğrulamam, yeni kullanıcılar kaydederken iyi çalışan 'email'=>'required|email|unique:users', belirtiyor.Laravel 4 doğrulama e-postası benzersiz kısıtlaması

Sorum o aksi yapabilirsiniz eski email-- aynı değilse sadece görevden aldığı form gönderildiğinde form--, ben benzersiz e-posta kısıtı için istediğiniz kullanıcı düzenlemeyi nasıl kontrol edileceğidir E-posta (e-postanız) zaten kullanılmadığından, profilinizi kaydedin.

Teşekkür

cevap

6

üçüncü parametre dışlamak için bu deneyin Ique kural, yok sayılacak bir kaydın kimliğini belirtmenize izin verir. Bir kullanıcıyı düzenlerken, benzersiz doğrulama kuralınızın, düzenlemekte olduğunuz kullanıcının kimliğinin içerdiği değeri görmezden gelmesini istersiniz.

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

Sen geçerlilik kuralı here üzerinde doküman görebilirsiniz.

Karşılaştığınız en zor kısım, düzenlediğiniz kullanıcının kimliğini sağlamak için kuralınızı nasıl düzenleyeceğinizi bulmaktır. Tüm bunlar, kurallarınızı nasıl oluşturduğunuza ve doğrulama işleminizi yaptığınız yere bağlıdır.

+0

Her zaman için Auth :: user() -> id', kullanıcı kaydın düzenlenmesi için oturum açılacağından beri – Rafael

+2

Kimliği almak zor olan kısım değildir. Kimliği, bazı kişilerin, kurallarının nasıl ve nerede tanımlandığını ve kullanıldığına bağlı olarak, sorun yaşadığı kuralına enjekte ediyor. Örneğin, kurallarınız modelde statik bir özellik olarak tanımlanıyorsa, kuralda bir tür yer tutucu ve ardından bu yer tutucusunu [bu] bölümünde açıklandığı gibi belirli bir kimlikle değiştirmenin bir yöntemine sahip olmanız gerekir. http://stackoverflow.com/questions/28054979/laravel-4-form-validation-should-be-unique-on-update-form-but-not-if-current/28056267#28056267) soru/cevap. – patricus

+1

Sizin noktanızı görüyorum ama bu durumda, doğrulama kurallarını tamamlamak için kimliği kimliğe iletmek OP'ye kalmış olur. Umarım bunu yapar. Ama bu, yola koyduğu yoldan gitmenin yolu gibi görünüyor. – Rafael

1

Eşsiz Doğrulama dizimi

unique:table,column,except,idColumn

un cari e-posta

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

+0

@ rafael-- teşekkürler ama bu gerçekten demek istemediğim şey değil. Eğer joe @ test.com 'yeni bir hesap kaydederse, doğrulama iyi sonuç verir. Daha sonra bir düzenleme formu gönderirse ve * e-postasını değiştirmezse, e-posta kullanımda olduğundan doğrulama başarısız olur, bu nedenle benzersiz değildir. – user101289

+0

Taşıma ve veritabanında, e-posta alanını ** benzersiz olarak dizine eklenecek şekilde ayarlamanız gerekir **. Bu şekilde veritabanı, bu tür bir şeyi ve doğrulayıcıyı idare edemez. '$ table-> unique ('email');' [Laravel Schema oluşturucu] (http://laravel.com/docs/4.2/schema#adding-indexes) – Rafael