laravel 此表单验证有什么问题

m1m5dgzv  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(195)

我正在使用Laravel 5.8,我已经创建了这个控制器方法,用于在DB中创建一些记录。

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);
    }
}

但这将不起作用,并返回以下错误:

给定的数据无效。

这基本上是因为表单验证请求,当我从方法中删除这些验证时,它将完全正常工作。
那么,返回此错误的表单请求验证有什么问题呢?
如果你知道,请让我知道...我真的真的很感激任何想法或建议,从你们。

  • 谢谢-谢谢
rggaifut

rggaifut1#

当你使用Laravel的验证时,你应该让Laravel处理错误,因为当一个规则失败时,Laravel会自动抛出一个异常。所以第一个建议是不要在你的验证例程中使用try-catch块。
正如Laravel文件所述:

显示验证错误

那么,如果传入的请求参数没有通过给定的验证规则怎么办呢?如前所述,Laravel会自动将用户重定向回他们之前的位置。此外,所有的验证错误都会自动刷新到会话中。
此外,我建议您不要在控制器中使用验证,因为根据良好的实践,建议创建单独的formRequest进行验证,因此您应该稍微修改控制器以包含validator类:

<?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验证用户输入并通过异常管理任何错误。
祝你好运

lp0sw83n

lp0sw83n2#

必须准确指定要验证的内容:

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

相关问题