Laravel 5 - 更新用户删除db中的密码字段

时间:2016-08-20 05:00:32

标签: laravel-5 laravel-5.2

我的想法已经不多了。我有一个控制器方法来更新我的数据库中的用户记录。

有一个表单,当前用户可以在其中输入他的姓名,用户名,电子邮件和密码。除密码之外的所有字段都预先填充了存储的值。

当用户将密码字段留空时,将覆盖当前密码。当然,我尝试使用empty()isset()

这是我的控制器方法:

public function update($user_id, Request $request){
    if(Auth::user()->canUpdateUser($user_id)){
        $user = User::find($user_id);

        $inputs = $request->all();

        foreach($inputs as $key => $value){
            if($key === 'password' && !empty($inputs[$key])) {
                $validator = Validator::make($inputs, [
                    'password' => 'confirmed|required'
                ]);
                if ($validator->fails()) {
                    return back()->withErrors($validator)->withInput();
                } else {
                    $user->$key = bcrypt($value);
                }
            } elseif($key === 'password_confirmation' || $key === '_token'){
                // Nothing
            } elseif($key === 'username') {
                $validator = Validator::make($request->all(), [
                    'username'  => 'unique:users,username,' . $user->id
                ]);
                if($validator->fails()){
                    return back()->withErrors($validator)->withInput();
                } else {
                    $user->$key = $value;
                }
            } elseif($key === 'email'){
                $validator = Validator::make($request->all(), [
                    'email'  => 'unique:users,email,' . $user->id
                ]);
                if($validator->fails()){
                    return back()->withErrors($validator)->withInput();
                } else {
                    $user->$key = $value;
                }
            } else {
                echo $key, "<br>";
                $user->$key = $value;
            }
        }

        $user->save();
        //return back()->with('success', 'Deine Daten wurden geändert');
    } else {
        abort(401);
    }
}

1 个答案:

答案 0 :(得分:0)

为什么for循环遍历每个变量?即使您有2个字段错误,您的方式一次只会返回一个错误。只需正常验证和更新用户(没有密码字段),然后对密码部分进行条件检查:

public function update($user_id, Request $request){
    if(Auth::user()->canUpdateUser($user_id)){
        $user = User::find($user_id);

        $fields = $request->except('password');
            $validator = Validator::make($fields, [
                'email'  => 'unique:users,email,' . $user->id,
                'username'  => 'unique:users,username,' . $user->id
            ]);
            if($validator->fails()){
                return back()->withErrors($validator)->withInput();
            } else {
                $user->update($fields);
            }
        }

        $pw = $request->get('password', '');

        if(str_len($pw) && $pw == $request->get('password_confirmation')){
          $user->pw = bcrypt($pw);
        }

        $user->save();

        return back()->with('success', 'Deine Daten wurden geändert');
    } else {
        abort(401);
    }