Validasi Laravel Melewati Input Kosong

Saya memiliki formulir laravel untuk memperbarui informasi pengguna yang ada di database, tetapi jika bidang dalam formulir itu kosong, saya tidak ingin memperbarui catatan tersebut di database. Seperti sekarang, jika kolom kosong dan formulir dikirimkan, input kosong tersebut akan diteruskan dan catatan dalam database akan dihapus.

Di bawah ini adalah fungsi untuk mengedit informasi pengguna dan kemudian melakukan pembaruan database. Saat ini saya melampirkan Permintaan::lama('...') ke email, tetapi karena validasinya adalah 'unik:pengguna', maka muncul kesalahan 'email diambil'.

Terima kasih,

public function postEdit(Request $request)
{
    $this->validate($request, [
        'email' => 'unique:users|email|max:255',
        'password' => 'min:6',
        'confirm_password' => 'same:password', 
        'about_me' => 'max:500',
    ]);

    Auth::user()->update([


        'email' => $request->input('email'),
        'password' => bcrypt($request->input('password')),
        'confirm_password' => bcrypt($request->input('confirm_password')),
        'about_me' => $request->input('about_me'),
    ]);

    return redirect()->route('profile.edit')->with('info', 'You have updated your profile!');
}

person Matt Pierce    schedule 29.11.2015    source sumber
comment
Jika pengguna menghapus informasi, berarti dia ingin kolom tersebut kosong. TIDAK?   -  person itachi    schedule 29.11.2015
comment
Ya, mereka membutuhkan alamat email di sistem. Jadi, pilihannya adalah (1) membuat bidang tersebut wajib diisi, namun memiliki validasi yang tidak error jika email tersebut sama dengan catatan database saat ini untuk pengguna tersebut, atau (2) membiarkan bidang tersebut kosong dan, jika demikian, simpan saja catatan basis data saat ini dan jangan setel ke ' '.   -  person Matt Pierce    schedule 29.11.2015
comment
Unique menerima parameter ke-3. Masukkan id pengguna dalam parameter itu dan itu akan memeriksa email unik meskipun bidang pengguna terkait akan dilewati.   -  person itachi    schedule 29.11.2015


Jawaban (2)


Anda perlu mengubah aturan unique untuk mengecualikan catatan yang sedang Anda edit.

Alih-alih

'email' => 'unique:users|email|max:255',

kamu harus menggunakan:

'email' => 'unique:users,email,'. Auth::user()->id.'|email|max:255',

Referensi untuk aturan unik

person Marcin NabiaƂek    schedule 29.11.2015
comment
Terima kasih, saya mencari pengecualian dalam aturan validasi dan tidak melihatnya tercantum di bawah unik. - person Matt Pierce; 29.11.2015

Dalam aturan validasi Anda dapat mengatur 'wajib', dan ini pasti membantu.

person Echo    schedule 29.11.2015
comment
Benar, tapi masalahnya adalah jika bidang itu wajib diisi, dan pengguna ingin tetap menggunakan email tersebut, maka email tersebut akan menampilkan kesalahan karena email tersebut sudah dipakai. - person Matt Pierce; 29.11.2015
comment
Saya melihat 2 opsi dalam kasus ini. 1) Hapus aturan unik dari validator dan periksa cara manual ini. 2) Dalam hal ini pengguna harus diberi otorisasi. Tulis aturan lain, yang akan menggabungkan aturan unik, dan periksa apakah email pengguna resmi sama dengan input. - person Echo; 29.11.2015