簡體   English   中英

Laravel 5.4圖像驗證不起作用

[英]Laravel 5.4 Image validation is not working

我有點在laravel中進行圖像驗證。 我必須驗證文件輸入必須是圖像,並且為此,我使用了經典的laravel驗證方式,但是我不知道為什么它不起作用嗎?

用戶控制器

public function createProfile(Request $request) {
    $phoneNumber=$request->phoneNumber;
    if (empty($request->except(['userId','token']))){
        $data= array(
            'nickName' => '',
            'profilePic' => '',
            'phoneNumber' => '',
            'userHeight' => '',
            'userWeight' => '',
            'userVertical' => '',
            'userSchool' => '',
            'homeTown' => '',
        );
        $this->setMeta("200", "Success");
        $this->setData("userDetails", $data);
        return response()->json($this->setResponse());
    }
    if($phoneNumber) {
        $validationData= array(
            'phoneNumber' => $phoneNumber,
        );
        $validationRules = array(
            'phoneNumber' => [
                'regex:/^[0-9]+$/',
                'min:10',
                'max:15',
                Rule::unique('users')->ignore($request->userId, 'userId'),

            ]
        );
        if($request->has('profilePic')){
            $validationData['profilePic'] = $request->profilePic;
            $validationRules['profilePic'] = 'image|mimes:jpeg,bmp,png';

        }
        $validator = Validator::make($validationData,$validationRules);
        if ($validator->fails()) {
            $errors = $validator->errors();
            if ($errors->first('phoneNumber')) {
                $message = $errors->first('phoneNumber');
            }  else if ($errors->first('profilePic')) {
                $message = $errors->first('profilePic');
            } else {
                $message = Constant::MSG_422;
            }
            $this->setMeta("422", $message);
            return response()->json($this->setResponse());
        }
    }
    $homeTown = $request->homeTown;
     $filename='';
    $profilePic=$request->file('profilePic');
    if(!empty($profilePic)) {
        $destinationPath = public_path() . '/uploads/users';
        $filename = "image_" . Carbon::now()->timestamp . rand(111, 999) . ".jpg";
        $profilePic->move($destinationPath, $filename);
    }

    $user = User::where('userId',$request->userId)->first();
    if($request->hasFile('profilePic')){
        $user->profilePic = $filename;
    }
    $user->nickName=$request->nickName;
    $user->phoneNumber=$request->phoneNumber;
    $user->userHeight=$request->userHeight;
    $user->userWeight=$request->userWeight;
    $user->userVertical=$request->userVertical;
    $user->userSchool=$request->userSchool;
    $user->homeTown=$homeTown;
    $user->save();
    $this->setMeta("200", "Profile Changes have been successfully saved");
    $this->setData("userDetails", $user);
    return response()->json($this->setResponse());
}

我認為您的驗證不起作用的原因是因為您在其中添加了規則:

if($request->has('profilePic')){

這需要是$request->hasFile('profilePic')

希望這可以幫助!

您可以像這樣使用,我認為它更好.....

     if($request->hasFile('profilePic')){                  
       $rules = array(
         'profilePic' => 'required | mimes:jpeg,jpg,png',
        );

    }      
   $validator = Validator::make($request->all(), $rules);

只需使用它進行驗證。 如果必須處理情況,請逐步進行調試。

$this->validate($request, [
   'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:5120',
   'description' => 'required'

]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM