Laravel请求验证不显示错误消息

时间:2020-01-11 11:44:42

标签: laravel laravel-6

使用组中间件后,我将无法访问错误消息。错误袋返回空。

以前没有问题。

我已经研究过,一些用户通过更改 http / kernel.php

解决了该问题。

\ Illuminate \ Session \ Middleware \ StartSession :: class $ middlewareGroups $ middleware

但是,它对我不起作用。

$ validated = $ request-> validated(); 函数不会返回验证错误。在我的CreditcardRequest类中,我具有属性,消息,规则功能。如果验证失败,则需要显示这些消息。 以前validated()时;方法在控制器上运行,如果表单为空,则显示消息。在中间件分组之前,我有20页全部可用。

信用卡刀片

<div class="messages">
    @if ($errors->any())
        <div class="row  mt-3">
            <div class="col-md-12">
                <div class="alert alert-warning alert-dismissable" role="alert">
                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                    <h3 class="alert-heading font-size-h4 font-w400">Error!</h3>
                    @foreach ($errors->all() as $error)
                        <p class="mb-0">{{ $error }}</p>
                    @endforeach
                </div>
            </div>
        </div>
    @endif
</div>

信用卡请求

public function attributes()
{
    return [
        'cc_name' => 'CC Owner',
        ..
    ];
}

public function messages()
{
    return [
        'required' => 'Required: :attribute',
        ...
    ];
}

public function rules()
{
    return [
        'cc_name' => 'required|max:128',
    ];
}

控制器

public function doPaySection(CreditcardRequest $request)
  {

      $validated = $request->validated();
      $cc = TRUE;
      if ($cc):
          return redirect('/pay_success')->with('success', 'success');
      else:
          return redirect('/pay_error')->with('error', 'error');
      endif;
  }

web.php

Route::group(['middleware' => ['client.role:guest']], function () {
    Route::get('/login', 'HomepageController@showLogin')->name('login');
    Route::post('/login', 'HomepageController@doLogin');
    Route::post('/register', 'HomepageController@doRegister');
    Route::get('/register', 'HomepageController@showRegister')->name('register');
});

login.blade

@if ($errors->any())
    <div class="row  mt-3">
        <div class="col-md-12">
            <div class="alert alert-warning alert-dismissable" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <h3 class="alert-heading font-size-h4 font-w400">Hata!</h3>
                @foreach ($errors->all() as $error)
                    <p class="mb-0">{{ $error }}</p>
                @endforeach
            </div>
        </div>
    </div>
@endif

控制器

public function doLogin(Request $request)
{
    if (auth()->guard('client')->attempt(['email' => request('email'), 'password' => request('password')])) {
        return redirect()->intended('/');
    } else {
        return redirect()->back()->with('error', 'error');
    }
}

3 个答案:

答案 0 :(得分:1)

您将可以从下面进入session('error')

return redirect()->back()->with('errors', 'error');

所以您的代码就像

@if (session('errors'))
    <div class="row  mt-3">
        <div class="col-md-12">
            <div class="alert alert-warning alert-dismissable" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <h3 class="alert-heading font-size-h4 font-w400">Hata!</h3>
                @foreach (session('errors') as $error)
                    <p class="mb-0">{{ $error }}</p>
                @endforeach
            </div>
        </div>
    </div>
@endif

答案 1 :(得分:1)

您目前拥有的代码不会向$errors MessageBag添加消息,它只会向会话中添加一个称为error的值。

如果您想在信息袋中添加错误,您可以简单地抛出ValidationException并用该信息重定向back

public function doLogin(Request $request)
{
    if (auth()->guard('client')->attempt($request->only('email', 'password'))) {
        return redirect()->intended('/');
    }

    throw ValidationException::withMessages([
        'error' => 'The error message',
    ]);
}

别忘了用以下命令导入ValidationException

use Illuminate\Validation\ValidationException;

答案 2 :(得分:1)

您可以尝试在请求中使用此标头吗?尤其是如果您是邮递员打来的。

Accept:application/json

在使用此功能之前,如果请求无效,我将获得csrf令牌。

enter image description here