Laravel更新记录

时间:2014-02-10 15:41:41

标签: laravel ardent

我在更新唱片时遇到了麻烦。我有一个用户可以注册的页面,这个工作完美无缺,有4个字段:电子邮件,用户名,密码和确认密码。这是一个简单的注册页面,我不想通过提供很多要填写的内容来关闭访问者,如全名和国家/地区,因此这两个字段可以在其“更新个人资料”页面上更新。配置文件页面分为多个区域,主要区域是单个表单,其中只能更新这两个字段,因此此处没有用户名,电子邮件,密码字段 - 仅限全名和国家/地区。

控制器更新配置文件代码

$user = User::find($id);

    $user->fullname = Input::get('fullname');
    $user->country = Input::get('country');


    if (!$user->save())
    {

        return Redirect::to('edit-profile')->withInput()->withErrors($user->errors());  

    } else {


        return Redirect::to('edit-profile')->withMessage('Profile successfully updated!');

    }       

我的用户模型规则。我正在使用Ardent:

public static $rules = array(
  'username' => 'required|between:3,20|unique:users|alpha_dash',
  'email' => 'required|email|unique:users',
  'password' => 'required|min:5|confirmed',
  'password_confirmation' => 'min:5',
  'fullname' => 'between:5,50',
  'country' => 'between:3,50'
);

这里的问题是它返回一条错误消息,说“密码不匹配。”。因此,似乎Laravel在查询中添加了密码字段,并尝试验证密码是否匹配。我不想为此创建单独的模型或单独的规则。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

要在不显示密码时使其正常工作,您可以测试是否正在显示密码,然后在控制器中将其设为必填字段:

if ($user->exists){
    $user::$rules['password'] = (Input::get('password')) ? 'required|min:5|confirmed' : '';
    $user::$rules['password_confirmation'] = (Input::get('password')) ? 'required' : '';
}
$user->save();