Laravel存储库更新不允许序列化'Closure'

时间:2015-02-10 17:11:59

标签: php laravel laravel-4

您好我正在尝试通过个人资料部分中的id更新单个用户。如果没有验证错误,这可以正常工作,但是如果我删除用户名,我会抛出一个错误,如下所示:

Serialization of 'Closure' is not allowed

除了我期望的验证错误消息,任何人都可以建议这意味着什么以及如何解决这个问题?我正在使用自定义存储库来处理数据库交互。我的配置文件控制器具有此功能:

public function updateProfileuser($id)
    {
      $updateprofileuser = $this->profile->findUserbyid($id);

      if($updateprofileuser)
      {
        $updateprofileuser = $this->profile->updateProfile($id, Input::all() );

          return Redirect::to('/profile')->with('success', 'Updated Profile');
        } elseif(!$updateprofileuser)
              {
                  return Redirect::back()->withInput()->withErrors($this->profile->errors); 
              }
    }

我的repo中的updateProfile()函数如下:

public function updateProfile($id) {

     $rules = array(
        'username' => 'required',
        'email'    => 'required'
    );

    $validator = \Validator::make(\Input::all(), $rules);

       if($validator->fails() ) {
        $this->errors =   \Session::flash('errors', $validator);

        } else {

            $user               = \User::find($id);
            $user->firstname    = \Input::get('firstname');
            $user->lastname     = \Input::get('lastname');
            $user->username     = \Input::get('username');
            $user->email        = \Input::get('email');
            $user->save();
        }
}

我的回购中的错误功能如下:

  public function errors()
  {
    return $this->errors;
  }

和我的repo界面

public function updateProfile($id);

public function errors();

我在传回错误消息时出错了吗?

1 个答案:

答案 0 :(得分:1)

问题在于:

 $this->errors =   \Session::flash('errors', $validator);

您正在尝试将$ validator对象序列化到Flash会话中,

所以只需将其更改为:

$this->errors = $validator;

虽然我建议你修改你的代码,但我对你要完成的工作有点困惑所以这只是一个建议。

您的updateProfileuser函数:

public function updateProfileuser($id)
{
  $updateprofileuser = $this->profile->findUserbyid($id);

  if($updateprofileuser)
  {

    $rules = array(
      'username' => 'required',
      'email'    => 'required'
    );

    $validator = \Validator::make(\Input::all(), $rules);

    if($validator->fails()){
      return Redirect::back()->withInput()->withErrors($validator);
    }else{
      $this->profile->updateProfile($id);
      return Redirect::to('/profile')->with('success', 'Updated Profile');
    }

  } else{
    //I don't know what you expect to pass here when $this->profile->findUserbyid($id) doesn't find anything
    $this->profile->errors = 'Id not found';
    return Redirect::back()->withInput()->withErrors($this->profile->errors);
  }
}

你的updateProfile函数:

public function updateProfile($id) {
  $user               = \User::find($id);
  $user->firstname    = \Input::get('firstname');
  $user->lastname     = \Input::get('lastname');
  $user->username     = \Input::get('username');
  $user->email        = \Input::get('email');
  $user->save();
}