【问题标题】:Validator function is not resulting error on edit page验证器功能不会在编辑页面上产生错误
【发布时间】: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


【解决方案1】:

这里的问题是你没有在控制器的任何地方使用validator 方法,而是使用validator 帮助器,它需要将规则作为第二个参数传递。在这种情况下,最简单的解决方案是改变:

$validator = validator($request->all());

进入

$validator = $this->validator($request->all());

使用您的自定义控制器方法,该方法将在您实施时创建验证器并传递规则

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多