首页 > 解决方案 > 提交数据并重定向到同一页面后的 Laravel 自定义错误消息,并带有一些小错误信息

问题描述

所以基本上我的计划是让我的应用程序更简单。如果用户想借很多书,可能是用户再次扫描同一本书,我得到的页面如下:

https://gyazo.com/e7236fec2cfc745d604d7eced2a1e333

或使用这个:

在此处输入图像描述

我知道这是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>

任何人都可以帮我解决这个问题吗?或者有任何想法如何解决这个问题?

标签: phphtmllaravel

解决方案


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

推荐阅读