2016-11-08 82 views
1

我目前正在嘗試以下操作:在我的數據庫中,我有一個名爲templateURL的列,它是一個唯一鍵,因此它可能只存在一次。然後如果有東西試圖提交一個表單,這與已經存在的相同,則會拋出一個錯誤,說 Integrity constraint violation: 1062 Duplicate entry for key 'templateURL'Laravel雄辯捕捉特殊期待

當然,確實如此,這就是爲什麼我讓這個專欄獨一無二的原因。但是:我想要的不是默認的Laravel Error,而是回到帶有仍然輸入的值的表單上,並返回一條消息(例如引導程序警告或者輸入字段旁邊的一個div),表示它已經存在並要求再挑一個。所以我需要捕捉這個異常,並做一些自定義的事情。我怎樣才能達到我想要的?

+0

閱讀此https://scotch.io/tutorials/laravel-form-validation – shoieb0101

+0

@ shoieb0101你的意思是與'$規則'的東西?看起來不錯,但我也可以把它放在我的控制器中,我必須像他那樣把它放在我的路線上? – user5638730

+0

您可以將您的驗證規則放入您的控制器或使用formRequest進行驗證。 https://laravel.com/docs/5.2/validation#form-request-validation – shoieb0101

回答

1

您必須將數據庫操作包裝到try-catch塊中,並在出現錯誤時捕獲錯誤並執行其他操作,可能會使用錯誤消息重定向舊輸入數據。

duplicate entry的錯誤代碼是。所以如果你得到1062作爲錯誤代碼,這意味着這個數據是重複的條目。這裏是捕捉這個異常的代碼。

try { 

    $data = Model::create(array(
     'templateURL' => 'some value ', 
    )); 

} catch (Illuminate\Database\QueryException $e) { 
    $errorCode = $e->errorInfo[1]; 
    if($errorCode == 1062){ 
     // we have a duplicate entry problem 
    } 
} 

或者,如果您不希望自己處理異常,您可以藉助Laravel Validator。就像在你的視圖模板在你的控制器以下

// validation rules 
$rules = array(
    'templateURL'   => 'unique:YourTableNameHere' 
); 

$validator = Validator::make(Input::all(), $rules); 

// check if the validation failed 
if ($validator->fails()) { 

    // get the error messages from the validator 
    $messages = $validator->messages(); 

    // redirect user back to the form with the errors from the validator 
    return Redirect::to('form') 
     ->withErrors($validator); 

} else { 

    // validation successful 

    $data = Model::create(array(
     'templateURL' => 'some value ', 
    )); 
} 

然後你就可以通過$errors變量訪問的錯誤消息。 瞭解更多關於那裏驗證https://laravel.com/docs/5.3/validation

+0

首先感謝您的回答。但有些東西似乎是錯誤的,我只是試圖在errorCode 1062的catch中回顯「test」,但沒有'test'回顯,而是仍然出現laravel錯誤。此外,我想知道如何(如果有errorCode 1062)可以返回到頁面仍然輸入的值,並顯示消息,這已經存在 – user5638730

+0

1062錯誤代碼是爲MySQL嗎?你在使用mysql嗎?你會嘗試重定向而不是回聲「測試」? –

+0

我使用雄辯,所以它是一個MySQL數據庫,但我不直接使用它,但錯誤消息說1062以及。但我的回答評論看起來不錯,也很容易,我直接回到表格等。 – user5638730