【发布时间】:2020-04-19 20:00:10
【问题描述】:
以下有一个使用自定义验证的 UserController@update_personal 方法。
用户控制器
public function update_personal(Request $request, User $user)
{
$validator = validator($request->all());
if ($validator->fails()) {
return back()
->withErrors($validator)
->withInput();
}
$userUpdate = User::where('id', $user->id)
->update([
'firstname' => $request->input('firstname'),
'lastname' => $request->input('lastname'),
'birth_date' => $request->input('birth_date'),
'phone' => $request->input('phone')
]);
if ($userUpdate) {
return redirect()
->route('users.index', ['user' => $user->id])
->with('success', 'Personal details updated successfully');
}
return back()->withInput();
}
验证器方法
protected function validator(array $data)
{
return Validator::make($data, [
'firstname' => ['required', 'string', 'max:50', 'alpha'],
'lastname' => ['required', 'string', 'max:50', 'alpha'],
'birth_date' => ['required', 'date'],
'phone' => ['required', new PhoneNumber()],
]);
}
路线
// Routes for UserController
Route::get('/users/{user}/personal', 'UserController@edit_personal')->name('users.edit-personal');
Route::put('/users/{user}/personal', 'UserController@update_personal')->name('users.update-personal');
Route::get('/users/{user}/email', 'UserController@edit_email')->name('users.edit-email');
Route::put('/users/{user}/email', 'UserController@update_email')->name('users.update-email');
Route::get('/users/{user}/password', 'UserController@edit_password')->name('users.edit-password');
Route::put('/users/{user}/password', 'UserController@update_password')->name('users.update-password');
Route::resource('users', 'UserController');
我尝试在每个输入字段下方显示错误,而不是完全显示所有错误。这是我的名字的刀片条目之一:
<div class="form-group col-md-6">
<label for="firstname">First Name</label>
<input id="firstname" type="text"
class="form-control @error('firstname') is-invalid @enderror"
name="firstname" value="{{ $user->firstname }}" required
autocomplete="given-name" autofocus>
@error('firstname')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
问题是无论我为输入字段“名字”输入什么值,数据库都会更新并显示成功页面,而不是显示错误。
例如,我将名字从“Kate”更改为“Kate1234”,它可以工作。但是我在验证器()中添加了一个“Alpha”标签。所以它不应该让我更新并显示输入下方的错误。知道这里有什么问题吗?
【问题讨论】:
-
你不需要在你的验证器上调用 ->validate() 吗?
标签: laravel validation laravel-6 laravel-validation