更新配置文件功能

时间:2014-12-09 08:47:05

标签: laravel laravel-4

我有一个检查更新用户个人资料信息的功能。目前,如果我每次尝试更新表单上的个人资料信息时,我都会在验证器中放置| unique:用户,因为用户(就是我)有我的电子邮件,所以不会让我这么做。所以我想出了一个独特的方法,包括当前用户在内的任何人都无法获得正在更新的电子邮件。

所以我需要将当前的auth电子邮件与数据库中的电子邮件进行比较。如果匹配则可以更新配置文件信息。我知道这很简单,但我不确定如何实现它,如果这是正确的逻辑。

那么在这段代码中我会发帖if(Auth :: user() - > email == $ email){.. update email ...} http://laravel.io/bin/GylBV#6此外,这是正确的方式这样做?

public function editProfileFormSubmit()
{

      $msg = 'Successfully Updated';
      $user_id = Auth::id();
      $user = User::find($user_id);
      $first_name = Input::get('first_name');
      $last_name = Input::get('last_name');
      $email = Input::get('email');
      $phone_number = Input::get('phone_number');
      $validator = Validator::make(Input::all(), array(
                    'email' => 'required|email',
                    'first_name' => 'required',
                    'last_name' => 'required',
                    'phone_number' => 'required'
                ));
        if ($validator->fails()) {
            return Redirect::route('edit-profile')
                            ->withErrors($validator)
                            ->withInput();
        }else{
              if(Input::hasFile('picture')){
                $picture = Input::file('picture');
                $type = $picture->getClientMimeType();
                $full_image = Auth::id().'.'.$picture->getClientOriginalExtension();
                if($type == 'image/png' || $type == 'image/jpg' || $type == 'image/jpeg'){
                  $upload_success =  $picture->move(base_path().'/images/persons/',
                    $full_image);
                  if($upload_success) {
                    $user->picture = $full_image;
                  } else {
                    $msg = 'Failed to upload picture.';
                  }
                }else{
                 $msg = 'Incorrect image format.';
                }
              }
            $user->first_name = $first_name;
            $user->last_name = $last_name;
            $user->email = $email;
            $user->phone_number = $phone_number;
            $user->save();
            return Redirect::route('invite')->with('global', $msg);
          }

}

1 个答案:

答案 0 :(得分:1)

担心,Laravel已经考虑过这个潜在的问题!如果您查看the docs for the unique validation rule,您会发现它可能需要一些额外的参数。碰巧的是,在查看唯一约束时,可以给它一个id来忽略。因此,您需要做的是计算当前模型的ID以进行更新并将其传递。在更新已登录用户的配置文件的情况下,Auth::id()使其变得简单正如你在代码中已有的那样。

$rules = [
    'email'      => ['required', 'email', 'unique:users,email,'.Auth::id()],
    'first_name' => ['required'],
    // etc...
];

显然我选择在那里使用数组语法作为验证规则,但你也可以使用pip语法。在一个不太具体的系统中(在crud postSave类型操作中创建或添加),您仍然可以通过简单地使用$model = Post::find($id)之类的东西来执行此操作,然后如果$model为空,则可以执行此操作;重新创建,您只需使用'unique',而如果$model不为空,请使用'unique:table,field,'.$model->getKey()