首頁  >  問答  >  主體

確定此表單驗證的問題

<p>我正在使用 Laravel 5.8,並且我已經製作了這個控制器方法來在資料庫中建立一些記錄。 </p> <pre class="brush:php;toolbar:false;">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); } }</pre> <p>但這將不起作用並返回此錯誤:</p> <h2><strong>給定資料無效。 </strong></h2> <p>這基本上是因為表單驗證請求,當我從方法中刪除這些驗證時,它會運作得很好。 </p> <p>那麼那些傳回此錯誤的表單請求驗證出了什麼問題? </p> <p>如果你知道,請告訴我...我非常感謝您們的任何想法或建議。 </p> <p>謝謝。 </p>
P粉296080076P粉296080076390 天前500

全部回覆(2)我來回復

  • P粉569205478

    P粉5692054782023-09-01 16:03:08

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

    $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,
                ]);
            }

    回覆
    0
  • P粉278379495

    P粉2783794952023-09-01 10:21:07

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

    如 Laravel 文件所述

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

    <?php
    
    namespace App\Http\Controllers;
    
    ...
    use App\Http\Requests\UploadVideoRequest;
    
    ...
    
    public function doTheUpload(UploadVideoRequest $request)
    {
        /*
        * Here where are calling validation as UploadVideoRequest
        */
    
        // logic for valid uploaded video
    }

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

    <?php
    
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class UploadVideoRequest extends FormRequest
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            /*
            * here you should check if the user is authorized to upload video 
            * or let in true if anyone can do that
            */
            return true;
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                'video' => '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 驗證使用者輸入並透過異常管理任何錯誤。

    問候。

    回覆
    0
  • 取消回覆