laravel 无法在不更改当前配置文件图片的情况下同时更新用户详细信息[重复]

wvmv3b1j  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(127)

此问题已在此处有答案

Laravel: Validator to validate only fields which exist in the passed data?(3个答案)
3天前关闭。
非常感谢大家!我最后的编码,修复了它的情况下,曾经帮助任何人..也可以更好地清理这段代码,但它的工作..我现在清理它太虽然和更新这一次。

public function storePersonalInfo(Request $request, $lang){
        
        $this->validate($request, [
        'avatar' => 'sometimes|required|mimes:jpeg,jpg,png',
        'firstName'    =>  'sometimes|required',
        'lastName'  =>  'sometimes|required'
        ]);

        $user = Auth::user();

        if ($file = $request->file('avatar')) {

        $filename = hash('sha1',$file->getClientOriginalName().'-'.time()).'.'.$file->getClientOriginalExtension() ;

        $filePath = 'users/'. Auth::user()->name.'/'.$filename;

        $image = Image::make($file);
        $image->fit(200, 200);

       
        if (Storage::put($filePath, (string) $image->encode())) {
            
        $user->avatar = Storage::url($filePath);
        }

        $user->first_name = $request->firstName;
        $user->last_name = $request->lastName;

        $user->save();

        flash(__('Profile Updated'), 'success');
        return back();
    }
    else
    {
        $user->first_name = $request->firstName;
        $user->last_name = $request->lastName;

        $user->save();

        flash(__('Profile Updated'), 'success');
            return back();
    }
}

///原始问题///
用户在他们的帐户中有一个生物配置文件来更新任何细节的变化,他们不能更新他们的名字,例如,而不必附加一个新的配置文件图片上传的名称保存被接受。有人可以请建议我如何可以有用户更新只是名称的细节,而不需要在同一时间的配置文件太…我的意思是,有些情况下,用户可能只是想更新他们的个人资料图片或只是他们的名字,当然是不一定要完全完成每一次..
对不起,问,但真的坚持在这个问题上..这个问题可能已经问过了,但我需要代码的具体援助,因为我不能看到我到底做错了什么,我一直在尝试了几天现在.. Laravel是不是我的专业知识在所有对不起!我已经附上了配置文件控制器代码如下:

public function storePersonalInfo(Request $request, $lang){
        
        $this->validate($request, [
            'avatar' => 'required|mimes:jpeg,jpg,png',
            'firstName'    =>  'required',
            'lastName'  =>  'required'
        ]);

        $user = Auth::user();

        $file = $request->file('avatar');

        $filename = hash('sha1',$file->getClientOriginalName().'-'.time()).'.'.$file->getClientOriginalExtension() ;

        $filePath = 'users/'. Auth::user()->name.'/'.$filename;

        $image = Image::make($file);
        $image->fit(200, 200);

        

        if (Storage::put($filePath, (string) $image->encode())) {
            
            $user->avatar = Storage::url($filePath);
        
        }else{
            return back();
        }

        $user->first_name = $request->firstName;
        $user->last_name = $request->lastName;

        $user->save();

        flash(__('Profile info updated with success '), 'success');
        return back();
    }

我尝试了各种if else语句,不幸的是,我找不到它。

ars1skjm

ars1skjm1#

目前,您的验证要求所有三个字段都存在,因此如果一个或多个字段不存在,则验证失败。
根据我的理解,你只需要至少有1个字段存在(并且有效),验证就可以了。require_without_all验证应该做到这一点:

$this->validate($request, [
        'avatar' => 'required_without_all:firstName,lastName|mimes:jpeg,jpg,png',
        'firstName'    =>  'required_without_all:avatar,lastName',
        'lastName'  =>  'required_without_all:avatar,firstName'
    ]);

(我没有检查你的代码后验证虽然)

相关问题