我的表正在更新,但在Laravel 6中更新之前未通过验证

问题描述 投票:0回答:1

我是第一次使用Laravel,6.2版。我的代码可以很好地用于更新数据库上的表,但是在更新之前无法验证数据。这是我第一次需要自行验证表单(而不是默认的laravel auth),我想我缺少一些基本的信息才能使它起作用。

我正在尝试使用当前密码制作新的更改密码表格-新密码-确认新密码。下面是我的路线,我的控制器和我的视图。

路线

Route::get('/cambiarclave', 'Auth\ChangePasswordController@showChangeForm');
Route::post('/cambiarclave', 'Auth\ChangePasswordController@changePassword')->name('cambiarclave');

ChangePasswordController.php

class ChangePasswordController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function showChangeForm()
    {
        return view('auth.cambiarclave');
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'clave-actual' => ['required', 'string', 'min:6'],
            'nueva-clave' => ['required', 'string', 'min:6', 'confirmed'],
        ]);
    }

    public function changePassword(request $request)
    {
        $data = $request->all();
        $user = User::find(auth()->user()->id);

        if (!Hash::check($data['clave-actual'], $user->password)) {
            return back()->with('error', 'You have entered wrong password');
        }

        $user_id = $user;
        $obj_user = User::find($user_id);
        $obj_user->password = \Hash::make($request->input('nueva-clave'));
        $obj_user->save();

        auth()->logout();

        return redirect('/ingreso');
    }
}

cambiarclave.blade.php

<form method="POST" id="change-password" role="form" name="change-password" action="{{ route('cambiarclave') }}"
      novalidate>
    @csrf
    <div class="form-group row">
        <label for="clave-actual" class="col-md-6 col-form-label text-md-right">{{ __('Clave actual') }}</label>
        <div class="col-md-5">
            <input type="password" class="form-control" id="clave-actual" name="clave-actual" placeholder="Password"
                   required autofocus>
            @if ($errors->has('clave-actual'))
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $errors->first('clave-actual') }}</strong>
                </span>
            @endif
        </div>
    </div>
    <div class="form-group row">
        <label for="nueva-clave" class="col-md-6 col-form-label text-md-right">{{ __('Nueva clave') }}</label>
        <div class="col-md-5">
            <input type="password" class="form-control" id="nueva-clave" name="nueva-clave" placeholder="Password"
                   required autofocus>
            @if ($errors->has('nueva-clave'))
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $errors->first('nueva-clave') }}</strong>
                 </span>
            @endif
        </div>
    </div>
    <div class="form-group row">
        <label for="nueva-clave-confirm"
               class="col-md-6 col-form-label text-md-right">{{ __('Confirmar nueva clave') }}</label>
        <div class="col-md-5">
            <input type="password" class="form-control" id="nueva-clave-confirm" name="nueva-clave-confirm"
                   placeholder="Password" required autofocus>
        </div>
    </div>
    <div class="form-group row mb-0">
        <div class="col-md-8 offset-4">
            <button type="submit" class="btn btn-primary w-50">
                <p class="h5 p-0 mt-1">{{ __('Cambiar') }}</p>
            </button>
        </div>
    </div>
</form>
php laravel laravel-6 laravel-validation laravel-6.2
1个回答
1
投票

您在这里错过了执行validator方法的机会。您应该添加如下代码:

$validator = $this->validator($data);

if ($validator->fails()) {
    return back()
        ->withErrors($validator)
        ->withInput();
}

之后

$user = User::find(auth()->user()->id);

控制器中的行以运行验证。

© www.soinside.com 2019 - 2024. All rights reserved.