我在更新唱片时遇到了麻烦。我有一个用户可以注册的页面,这个工作完美无缺,有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在查询中添加了密码字段,并尝试验证密码是否匹配。我不想为此创建单独的模型或单独的规则。我该如何解决这个问题?
答案 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();