確定此表單驗證的問題
P粉296080076
P粉296080076 2023-08-31 17:10:00
0
2
466

我正在使用 Laravel 5.8,並且我已經製作了這個控制器方法來在資料庫中建立一些記錄。

public function doTheUpload(Request $request) { try{ $request->validate([ 'video' => 'nullable|mimes:mp4', 'video_thumb' => 'required|mimes:jpg,png,jpeg', 'video_name' => 'required', 'video_desc' => 'nullable', 'available_download' => 'nullable', ],[ 'video.mimes' => 'video file format is not valid', 'video_thumb.required' => 'uploading video thumbnail is required', 'video_name.required' => 'you must enter name of video', 'video_thumb.mimes' => 'image thumbnail file format is not valid', ]); // Do the upload process }catch(\Exception $e){ dd($e); } }

但這將不起作用並返回此錯誤:

給定資料無效。

這基本上是因為表單驗證請求,當我從方法中刪除這些驗證時,它會運作得很好。

那麼那些傳回此錯誤的表單請求驗證出了什麼問題?

如果你知道,請告訴我...我非常感謝您們的任何想法或建議。

謝謝。

P粉296080076
P粉296080076

全部回覆 (2)
P粉569205478

您必須準確指定要驗證的內容:

$request->validate([ 'request.video' => 'nullable|mimes:mp4', 'request.video_thumb' => 'required|mimes:jpg,png,jpeg', 'request.video_name' => 'required', 'request.video_desc' => 'nullable', 'request.available_download' => 'nullable', ], [ 'request.video.mimes' => 'video file format is not valid', 'request.video_thumb.required' => 'uploading video thumbnail is required', 'request.video_name.required' => 'you must enter name of video', 'request.video_thumb.mimes' => 'image thumbnail file format is not valid', ]);

我的程式碼範例:

$requestData = $request->request_data; // data $company_name = $requestData['company_name']; $company_type = $requestData['company_type']; $company_address = $requestData['company_address']; $latitude = $requestData['latitude']; $longitude = $requestData['longitude']; $company_branch_count = $requestData['company_branch_count']; $yes_radio = strval($requestData['yes_radio']); $no_radio = strval($requestData['no_radio']); $company_contact_user_first_name = $requestData['company_contact_user_first_name']; $company_contact_user_last_name = $requestData['company_contact_user_last_name']; $company_contact_user_email = $requestData['company_contact_user_email']; $company_contact_user_password = $requestData['company_contact_user_password']; $company_contact_user_phone = $requestData['company_contact_user_phone']; $company_kvkk_ok = strval($requestData['company_kvkk_ok']); $shipping_method_yourself = $yes_radio === 'true' && $yes_radio != $no_radio ? 1 : 0; if ($company_kvkk_ok == 'false') { return json_encode([ 'operation_status' => 'error', 'error_messages' => 'no', ]); } // Validate $validator = Validator::make($request->all(), [ "request_data.company_name" => "required|string|min:5", "request_data.company_type" => "required|in:0,1,2,3,4,5,6,7,8,9,10,11,12", "request_data.company_address" => "required", "request_data.latitude" => "required", "request_data.longitude" => "required", "request_data.company_branch_count" => "required|integer", "request_data.yes_radio" => "required", "request_data.no_radio" => "required", "request_data.company_contact_user_first_name" => "required", "request_data.company_contact_user_last_name" => "required", "request_data.company_contact_user_email" => [ 'required', 'email', Rule::unique('users', 'email')->where(function ($query) use ($company_contact_user_email) { return $query->where('email', $company_contact_user_email); }), Rule::unique('companies', 'company_contact_user_email')->where(function ($query) use ($company_contact_user_email) { return $query->where('company_contact_user_email', $company_contact_user_email); }), ], "request_data.company_contact_user_password" => "required|min:6", "request_data.company_contact_user_phone" => "required", "request_data.company_kvkk_ok" => "required", ], [ 'request_data.company_name.required' => __('company name required'), 'request_data.company_name.string' => __('company name must be string'), 'request_data.company_name.min' => __('company name must be at least 5 characters'), 'request_data.company_type.required' => __('company type required'), 'request_data.company_type.in' => __('company type invalid'), 'request_data.company_address.required' => __('company address required'), 'request_data.latitude.required' => __('latitude required'), 'request_data.longitude.required' => __('longitude required'), 'request_data.company_branch_count.required' => __('company branch count required'), 'request_data.company_branch_count.integer' => __('company branch count must be integer'), 'request_data.yes_radio.required' => __('yes radio required'), 'request_data.no_radio.required' => __('no radio required'), 'request_data.company_contact_user_first_name.required' => __('company contact user first name required'), 'request_data.company_contact_user_last_name.required' => __('company contact user last name required'), 'request_data.company_contact_user_email.required' => __('company contact user email required'), 'request_data.company_contact_user_email.email' => __('company contact user email invalid'), 'request_data.company_contact_user_email.unique' => __('email already taken'), 'request_data.company_contact_user_password.required' => __('company contact user password required'), 'request_data.company_contact_user_password.min' => __('company contact user password must be at least 6 characters'), 'request_data.company_contact_user_phone.required' => __('company contact user phone required'), 'request_data.company_kvkk_ok.required' => __('company kvkk ok required'), ]); if ($validator->fails()) { $messages = $validator->messages(); return json_encode([ 'operation_status' => 'not_validated', 'request' => $requestData, 'messages' => $messages, ]); }
    P粉278379495

    當你使用 Laravel 的驗證時,你應該讓 Laravel 處理錯誤,因為當規則失敗時,Laravel 會自動拋出例外。 因此,第一個建議是不要在驗證例程中使用 try-catch 區塊。

    如 Laravel 文件所述: p>

    此外,我建議您不要在控制器中使用驗證,因為根據良好實踐,建議創建單獨的 formRequest 進行驗證,因此您應該稍微修改控制器以包含驗證器類別:

    
              

    現在您必須建立一個表單請求,也許使用 php artisan make:request UploadVideoRequest# 此命令將在app/Http/Requests下建立一個表單請求類,您應將其填充為:

     'nullable|mimes:mp4', 'video_thumb' => 'required|mimes:jpg,png,jpeg', 'video_name' => 'required', 'video_desc' => 'nullable', 'available_download' => 'nullable', ]; } /** * Define messages to return if an error is detected. * * @return array */ public function messages() { return [ 'video.mimes' => 'video file format is not valid', 'video_thumb.required' => 'uploading video thumbnail is required', 'video_name.required' => 'you must enter name of video', 'video_thumb.mimes' => 'image thumbnail file format is not valid', ]; } }

    透過使用此方法,Laravel 驗證使用者輸入並透過異常管理任何錯誤。

    問候。

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!