2017-05-09 148 views
1

我試圖讓用戶可以在他們的面板中更改(更新)他們的信息,我還想讓他們更改他們的電子郵件地址以及他們的密碼,但是是可選的,例如他們可能只是想更改他們的名字,而不是更改電子郵件地址或密碼什麼是驗證方法?Laravel驗證方法

我的驗證是目前這一點,但將返回錯誤的電子郵件地址是相同的:

public function update(Request $request, $id) 
    { 
     $user = User::find($id); 
     $this->validate($request, array(
       'name' => 'required|string|max:255', 
       'email' => 'nullable|string|email|max:255|unique:users', 
       'gender' => 'required|string', 
       'password' => 'nullable|string|min:6|confirmed', 
      )); 

     $user = User::find($id); 

     $user->name = $request->input('name'); 
     $user->email = $request->input('email'); 
     $user->gender = $request->input('gender'); 
     $user->password = $request->input('password'); 

     $user->save(); 

     Session::flash('success', 'Your information was successfully updated.'); 

     return redirect()->route('users.list', $user->id); 
    } 
+0

除去獨特的價值。刪除這樣的重要規則不是一個好的選擇。 –

+0

@BilalAhmed這是不是穩定:

除 - - >排除列名

idColumn>排除列

Sakuto

+0

沒有人這樣做。你必須創建另一個頁面更新電子郵件地址 – Kristoff

回答

4

documentation,您可以驗證忽略當前用戶的電子郵件地址:

'email' => Rule::unique('users')->ignore($user->id) 

如果你的表使用除ID以外的主鍵列名,你可以調用時指定的列名忽略方法:

'email' => Rule::unique('users')->ignore($user->id, 'user_id') 

所以,

$this->validate($request, array(
     'name' => 'required|string|max:255', 
     'email' => [ 
      'required','nullable','string','email','max:255', 
      Rule::unique('users')->ignore($user->id), 
     ], 
     'gender' => 'required|string', 
     'password' => 'nullable|string|min:6|confirmed', 

    )); 
+0

你能分享完整的代碼嗎?有點混亂。如果我忽略它,當他們想要編輯它時怎麼樣?那麼仍然會被忽略? –

+0

都是原樣。只需更改「電子郵件」規則並忽略此特定電子郵件地址僅用於驗證,不影響其他任何內容。 –

+0

我敢肯定,這將是錯誤的邏輯 – Kristoff

0

您的用戶更新它應該是這樣的:

public function update(Request $request, $id) 
    { 
     $user = User::find($id); 
     $this->validate($request, array(
       'name' => 'required|string|max:255', 
       'gender' => 'required|string', 
       'password' => 'nullable|string|min:6|confirmed', 
      )); 

     $user = User::find($id); 

     $user->name = $request->input('name'); 
     $user->gender = $request->input('gender'); 
     $user->password = $request->input('password'); 

     $user->save(); 

     Session::flash('success', 'Your information was successfully updated.'); 

     return redirect()->route('users.list', $user->id); 
    } 

,那麼你必須創建新頁面更新新地址。

+0

爲什麼要刪除電子郵件字段驗證程序?像這樣,他們甚至可以使用非電子郵件只是文本或使其爲空! –

+0

當你允許用戶註冊時你應該已經檢查過唯一的電子郵件地址嗎?對 ?如果用戶只是更新,然後更改新的地址電子郵件爲什麼你需要檢查有效的註冊? – Kristoff

+0

以確保新的電子郵件地址也是電子郵件地址,而不是簡單的文本或空白字段。強迫他們僅通過電子郵件更改電子郵件。 –

0

只是將其更改爲下面的唯一名字字段驗證:

$this->validate($request, array(
      'name' => 'required|string|max:255', 
      'email' => 'required|string|email|max:255|unique:users,'.$id,//validate for unique email except this id 
      'gender' => 'required|string', 
      'password' => 'required|string|min:6|confirmed', 
     )); 
+0

沒有人!我需要驗證其他字段,當我讓他們編輯我想讓他們改變他們的信息與有效的數據。 –

0
$this->validate($request, array(
       'name' => 'required|string|max:255', 
       'email' => 'nullable|string|email|max:255|unique:users,email,id,'.$userId, 
       'gender' => 'required|string', 
       'password' => 'nullable|string|min:6|confirmed', 
      )); 

$ userID是給予用戶

唯一需要4 PARAMS 獨特的用戶表的ID:表,列,除非,idColumn

表 - >表名

柱 - > uniqueColumnName

用戶
+0

未定義的變量:userId –

+0

將$ userId更改爲$ id – jagadish