Laravel запрос проверки не показывает сообщения об ошибках - PullRequest
0 голосов
/ 11 января 2020

После того, как я использовал групповое промежуточное ПО, я не могу получить доступ к сообщениям об ошибках. Пакеты ошибок возвращаются пустыми.

Раньше проблем не было.

Я исследовал, некоторые пользователи решили проблему, изменив http / kernel. php

\ Illuminate \ Session \ Middleware \ StartSession :: class, $ middlewareGroups до $ middleware .

Однако, это не работает для меня.

Также $ validated = $ request-> validated (); функция не возвращает ошибку проверки. В моем классе CreditcardRequest у меня есть атрибуты, сообщения, функции правил. Если проверка не пройдена, эти сообщения должны быть показаны. ранее при проверке (); Метод работал на контроллере, он показывал сообщения, если форма пуста. У меня есть 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');
    }
}

Ответы [ 2 ]

1 голос
/ 11 января 2020

Код, который у вас есть в минуту, не добавит сообщение к $errors MessageBag, он просто добавит значение в сеанс, называемый ошибкой.

Если вы хотите добавить ошибку в пакет сообщений, вы можете просто добавить 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;
0 голосов
/ 11 января 2020

Вы сможете войти в 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
...