[英]Call to a member function fails() on array
我的 Laravel 驗證有問題。
在數組上調用成員函數 failed()
Symfony\\Component\\Debug\\Exception\\FatalThrowableError 拋出消息“調用成員函數失敗()在數組上”
堆棧跟蹤:
`#0 Symfony\\Component\\Debug\\Exception\\FatalThrowableError in C:\\laragon\\www\\frontine\\app\\Http\\Controllers\\authController.php:37
public function postRegister(Request $request)
{
$query = $this->validate($request, [
'user' => 'string|required|unique:users|min:4|max:24',
'email' => 'email|string|required|unique:users',
'pass' => 'string|required|min:8',
'cpass' => 'string|required|min:8|same:pass',
'avatar' => 'image|mimes:jpeg,jpg,png|max:2048',
]);
if ($query->fails())
{
return redirect('/registrar')
->withErrors($query)
->withInput();
}
}
錯誤是因為->validate()
方法在應用於Request
類時返回一個包含已驗證數據的array
。 另一方面,您正在使用->fails()
方法,該方法在手動創建驗證器時使用。
從文檔:
手動創建驗證器
如果您不想在請求上使用
validate
方法,您可以使用Validator
外觀手動創建一個驗證器實例。 Facade 上的make
方法生成一個新的驗證器實例:use Validator; // <------ use Illuminate\\Http\\Request; class PostController extends Controller { public function store(Request $request) { $validator = Validator::make($request->all(), [ // <--- 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); if ($validator->fails()) { return redirect('post/create') ->withErrors($validator) ->withInput(); } // Store the blog post... } }
->fails()
在Validator::make([...])
方法的響應中被調用,該方法返回一個Validator
實例。 此類具有當您嘗試手動處理錯誤響應時要使用的fails()
方法。
另一方面,如果您在$request
對象上使用validate()
方法,結果將是一個包含驗證數據的數組,以防驗證通過,或者它將處理錯誤並將錯誤詳細信息添加到您的響應中顯示在您的視圖中,例如:
public function store(Request $request)
{
$validatedData = $request->validate([
'attribute' => 'your|rules',
]);
// I passed!
}
Laravel 會自動處理驗證錯誤:
如您所見,我們將所需的驗證規則傳遞給了 validate 方法。 同樣,如果驗證失敗,將自動生成正確的響應。 如果驗證通過,我們的控制器將繼續正常執行。
這個錯誤告訴你的是,通過執行$query->fails
你正在調用一個方法fails()
在某些東西(即$query
)上不是一個對象,而是一個數組。 如文檔中所述, $this->validate()
返回一個錯誤數組。
在我看來,您似乎在代碼中混合了一些有關 驗證掛鈎的示例代碼。
如果驗證規則通過,您的代碼將繼續正常執行; 但是,如果驗證失敗,則會拋出異常,並自動將正確的錯誤響應發送回用戶。 在傳統 HTTP 請求的情況下,將生成重定向響應,[...] - Laravel Docs
以下代碼應該可以解決問題。 然后,您只需在視圖中顯示錯誤。 您可以閱讀所有相關內容,您猜對了,在... 文檔中。
public function postRegister(Request $request)
{
$query = $request->validate($request, [
'user' => 'string|required|unique:users|min:4|max:24',
'email' => 'email|string|required|unique:users',
'pass' => 'string|required|min:8',
'cpass' => 'string|required|min:8|same:pass',
'avatar' => 'image|mimes:jpeg,jpg,png|max:2048',
]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.