Пользовательское сообщение об ошибке Laravel после отправки данных и перенаправления на ту же страницу с небольшой информацией об ошибке - PullRequest
0 голосов
/ 13 ноября 2018

Так что в основном мой план состоит в том, чтобы сделать мое приложение более простым. Если пользователь хочет одолжить много книг, возможно, он снова сканирует ту же книгу, и страница, которую я получаю, выглядит следующим образом:

https://gyazo.com/e7236fec2cfc745d604d7eced2a1e333

или используйте это:

enter image description here

Я знаю, что это производство, а не режим разработки Laravel. Итак, как я могу перенаправить страницу с информацией об ошибке для пользователя, чтобы он мог понять, что он дважды отсканировал книгу? Поэтому я просто хочу преобразовать сообщения об ошибках в базе данных в простое перенаправление и сообщение, но как мне достичь этой цели? `

Сначала я даю код моего взгляда:

      <div class="row justify-content-center">
        <div class="col-md-8">
    <!--  <script> setTimeout(function(){window.location=localhost:8000/}, 5); </script> -->
          <br>
          <br>
            <div class="card">
                <div class="card-header">{{ __('lend book') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('borrow.store') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="serialnumber" class="col-md-4 col-form-label text-md-right">{{ __('Bitte serialnumber scannen') }}</label>

                            <div class="col-md-6">
                                <input id="serialnumber" type="text" class="form-control{{ $errors->has('serialnumber') ? ' is-invalid' : '' }}" name="serialnumber" value="{{ old('serialnumber') }}" required autofocus>

                                @if ($errors->has('serialnumber'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('serialnumber') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>
                          <div class="form-group row">
                            <label for="ma_id" class="col-md-4 col-form-label text-md-right">{{ __('scan membercard to identify yourself') }}</label>
                            <div class="col-md-6">

                              <input id="ma_id" type="password" class="form-control" name="ma_id" required>


                              @if ($errors->has('ma_id'))
                              <span class="invalid-feedback">
                                <strong>{{ $errors->first('ma_id') }}</strong>
                              </span>
                              @endif
                          </div>
                        </div>


                        <div class="form-group row">
                          <label for="comment" class="col-md-4 col-form-label text-md-right">{{ __('comment') }}</label>
                          <div class="col-md-6">

                            <input id="comment" type="text-field" class="form-control" name="comment" placeholder="Test">


                            @if ($errors->has('comment'))
                            <span class="invalid-feedback">
                              <strong>{{ $errors->first('comment') }}</strong>
                            </span>
                            @endif
                        </div>
                        </div>




                      <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('send') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
 @endsection

Это мой код контроллера:

 public function store(Request $request)
{
    $this->middleware('guest');

    request()->validate([
      'seriennummer' => 'required',
      'ma_id' => 'required'
    ]);

    borrow::create($request->all());


    return redirect()->route('borrow.index')
                     ->with('success','Proccess succesfully');

}

Итак, я попытался изменить возврат на следующее:

redirect()->back()->withErrors($validator)->withInput();

или

 return back()->with('autofocus', true);

и такой вид:

<input id="serialnumber" type="text" class="form-control{{ $errors->has('serialnumber') ? ' is-invalid' : '' }}" name="serialnumber" value="{{ old('serialnumber') }}" required   @if (Session::has('autofocus')) autofocus @endif>

Кто-нибудь может мне помочь сделать это правильно? Или у кого-нибудь есть идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Запустите php artisan make:request BookRequest в корневой папке проекта (CMD);

Добавьте новый запрос к вашей функции в вашем контроллере , чтобы он выглядел следующим образом:

use App\Http\Requests\BookRequest

Class BookController extends Controller
{
    ...      

    public function store (BookRequest $request)
    {
        <Your code here, you do not need to worry about validation, it is done previous of calling store now! If it fails it redirects automatically to the previous page!>
        ... Your logic to add the book into the DB...
    }
    ...
}

Ваш Класс BookRequest расположен по адресу App\Http\Requests:

Class BookRequest extends FormRequest
{
    public function authorize()
    {
        <You can add here authorization like if user is authenticated. If you do not wish so, and just make it available just return TRUE>

        return TRUE;
    }        

    public function rules()
    {
        return [
            'seriennummer' => 'required|unique',
            'ma_id' => 'required'
        ];
    }

    public function messages()
    {
        return [
            'seriennummer.required' => 'You need to select a book',
            'seriennummer.unique' => 'Seems like you have added the same book more than once!',
        ... Your other fields you wish to validate. This fields are declared on the form!...
       ];
    }

}

В вашем виде :

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
0 голосов
/ 13 ноября 2018

попробуйте с этим:

use Illuminate\Support\Facades\Validator;
...
$validator = Validator::make($request->all(), [
   'seriennummer' => 'required|unique',
   'ma_id' => 'required'
]);
if ($validator->fails()) {
    return redirect()->back()
                    ->withErrors($validator)
                    ->withInput();
}

и на виду

@if ($errors->has('seriennummer'))
    <span class="help-block"><strong>{{ $errors->first('seriennummer') }}</strong></span>
@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...