当我想在同一页面上显示多个表单时显示验证错误时,我遇到了一些问题。
如下所示,我在同一页面上有两种表格(一般和密码)。
| | GET|HEAD | profile/edit/settings | | App\Http\Controllers\ProfileController@getEditSettings | web,auth |
| | POST | profile/edit/settings/general | | App\Http\Controllers\ProfileController@postEditSettings | web,auth |
| | POST | profile/edit/settings/password | | App\Http\Controllers\ProfileController@postEditPassword | web,auth |
每个表单都有一个隐藏的输入字段,如下所示:
<input type="hidden" name="password2" value="1">
在视图的底部,我得到了这个:
@if (!empty(old('password2')))
@include('errors.common')
@endif
这样我就不会在两个表单上显示相同的错误。 但是没有任何错误显示出来。
如果我dd(old('password2'))
我得到null
。
在我的ProfileController中,我有这个方法:
/**
* @return mixed
* Processing new password
*/
public function postEditPassword() {
// Grab signed user
$user = Auth::user();
// Change password
$user -> changePassword(Input::all());
}
如上所示,我尝试使用User模型中的自定义方法更改密码,如下所示:
public function changePassword($data) {
// The signed user
$user = Auth::user();
// Try to match the old password
if (!Hash::check($data['old_password'], $user -> password)) {
return redirect() -> back() -> with('error', 'Det gamle passordet stemmer ikke.');
}
// Validate the new password
$validator = Validator::make([
'password' => $data['password'],
'password_confirm' => $data['password_confirm']
], [
'password' => 'required|min:6',
'password_confirm' => 'required|min:6|same:password'
]);
if ($validator -> fails()) {
return redirect() -> back() -> withErrors($validator);
}
// Change the password
$user -> password = bcrypt($data['password']);
$user -> save();
return redirect() -> back() -> with('success', 'Passordet ble endret!');
}
此外,除了错误视图问题之外,我想知道这是否是一种处理不同形式的好方法(在控制器中获取数据,发送到模型进行处理,然后模型将重定向)。