在 Laravel 的同一页上有 2 个表单?

Having 2 forms on the same page in Laravel?

我正在尝试用我的 PHP 代码解决一个 "two forms on one page" 问题,但它比我预期的要麻烦得多,而且没有以正确的方式运行我以为会。

对于第一种形式(登录),我使用此 if 语句来确定消息是否用于登录。

@if(Session::has('message') && Session::get('last_message_for') == 'login')
<div class="notification is-{{ Session::get('color') }}">
    <i class="fa fa-times"></i> &nbsp;&nbsp;{{ Session::get('message') }}
</div>
@elseif($errors->first() && Session::get('last_message_for') == 'login')
<div class="notification is-warning">
    <i class="fa fa-times"></i> &nbsp;&nbsp;{{ $errors->first() }}
</div>
@endif

我的第二个表单有相同的代码,但它只是检查 last_message_for 与 'login' 不同的值。

@if(Session::has('message') && Session::get('last_message_for') == 'modal')
<div class="modal is-active" id="modal-forgotPassword">
@else 
<div class="modal" id="modal-forgotPassword">
@endif
    <div class="modal-background"></div>
    <div class="modal-card">
        <header class="modal-card-head">
            <p class="modal-card-title" id="open-modal">Forgot Password?</p> <button class="delete"></button>
        </header>
        <form action="{{ route('frontend.guest.password.forgot') }}" method="post">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <section class="modal-card-body">
                <div class="content">
                    @if(Session::has('message') && Session::get('last_message_for') == 'modal')
                    <div class="notification is-{{ Session::get('color') }}">
                        <i class="fa fa-times"></i> &nbsp;&nbsp;{{ Session::get('message') }}
                    </div>
                    @endif
                    <div class="field">
                        <p class="control has-icons-left">
                            <input class="input" name="email" placeholder="Enter an email..." type="email">
                            <span class="icon is-small is-left"><i class="fa fa-envelope"></i></span>
                        </p>
                    </div>
                    <input type="hidden" name="_token" value="{{ csrf_token() }}">
                </div>
            </section>
            <footer class="modal-card-foot">
                <button class="button is-success" type="submit"><i class="fa fa-sign-in"></i> &nbsp;&nbsp;Send email</button>
            </footer>
        </form>
    </div>
</div>

现在问题来了,登录部分工作得很好,并在有任何错误消息时显示错误消息,但第二个部分在我有错误消息时不显示任何错误。

我正在使用它来设置 last_message_for

Session::put('last_message_for', 'login');

这是我的第二种形式的代码:

public function onForgotPassword(Request $request) {
    $validator = Validator::make($request->all(), [
        'email' => 'required|email|exists:users,mail',
    ]);

    Session::put('last_message_for', 'modal');

    if ( $validator->fails()) {
        return redirect()->route('frontend.guest.login')->withErrors($validator->messages());;
    }
    else {
        Mail::to($request->input('email'))->send(new ForgotPasswordEmail());
        return redirect()->route('frontend.guest.login')->withMessage('Email Sent')->withColor('warning');
    }
}

您不处理验证错误,只处理返回的消息,应该这样做。

@if(Session::has('message') && Session::get('last_message_for') == 'modal')
<div class="notification is-{{ Session::get('color') }}">
    <i class="fa fa-times"></i> &nbsp;&nbsp;{{ Session::get('message') }}
</div>
@elseif($errors->first() && Session::get('last_message_for') == 'login')
<div class="notification is-warning">
    <i class="fa fa-times"></i> &nbsp;&nbsp;{{ $errors->first() }}
</div>
@endif

我在同一个页面中有两个表单,因此您可以使用 flash 轻松地将错误分配给每个表单 session 在你的控制器中只使用 session 像这样行

use Session;

此代码与两个搜索表单相关

//searchInHistory
 public function searchInHistory(){
    $date = Request()->all();
    $rules   = [
        'dateFrom'   =>'required',
        'dateTo'     =>'required',
    ];

    $validator = Validator($date,$rules);
    if ($validator->fails()){
        Session::flash('inError', 'inError');
        return redirect()
                    ->back()
                    ->withErrors($validator)
                    ->withInput();
    }else{

        $store = DB::table('stores')->select(
            'store_details.id',
            'store_details.status',
            'stores.id AS storeId',
            'stores.partNo',
            'stores.title',
            'store_details.serialNo',
            'store_details.created_at',
            'store_details.updated_at'
            )
            ->join('store_details', 'store_details.storeId', '=', 'stores.id')
            ->where('store_details.status','inside')
            ->whereBetween('store_details.created_at',[$date['dateFrom'],$date['dateTo']])
            ->get();
        return view('crm.store.in',compact('store'));
    }
}
//===============
//searchHistory
 public function searchOutHistory(){
    $date = Request()->all();
    $rules   = [
        'dateFrom'   =>'required',
        'dateTo'     =>'required',
    ];

    $validator = Validator($date,$rules);
    if ($validator->fails()){
        Session::flash('inError', 'inError');
        return redirect()
                    ->back()
                    ->withErrors($validator)
                    ->withInput();
    }else{
        $store = DB::table('stores')->select(
            'store_details.id',
            'store_details.status',
            'stores.id AS storeId',
            'stores.partNo',
            'stores.title',
            'store_details.serialNo',
            'store_details.created_at',
            'store_details.updated_at'
            )
            ->join('store_details', 'store_details.storeId', '=', 'stores.id')
            ->where('store_details.status','outside')
            ->whereBetween('store_details.updated_at',[$date['dateFrom'],$date['dateTo']])
            ->get();
        return view('crm.store.out',compact('store'));
    }
}
//===============

使用 session 将每个错误分配给特定表单上方的以下代码 这是 blade 代码查看与两种形式相关的代码

  <!-- Main content -->
 <section class="content">
   <div class="row">
     <div class="col-xs-12">
      <div class="box">
          <div class="box-header">
            <h3 class="box-title">Store IN / OUT Control</h3>
          </div>
          <div class="row">
                <div class="col-md-6">
                  <div class="box-body">
                    @if(session('outError'))
                        @if ($errors->any())
                          <div class="alert alert-danger">
                              <center>
                                  @foreach ($errors->all() as $error)
                                      {{ $error }}<br>
                                  @endforeach
                              </center>
                          </div>
                        @endif
                    @endif
                    @if(session('out'))
                        @if(session('save'))
                        <div class="alert alert-success">
                            <center>
                               Products Came out of Successfully
                            </center>
                        </div>
                        @endif   
                    @endif

                       <!-- form start -->
                       <form role="form" method="post" action="{{url('admin/takeProductOutStore')}}" enctype="multipart/form-data">
                        {{csrf_field()}}
                        <div class="box-body">
                        <input type="hidden" name="id" value="{{$storeId}}">
                              <div class="form-group">
                                <label>Products in Store</label>
                                <select multiple class="form-control" name="products[]" required>
                                    @foreach($InDoorProducts as $row)
                                      <option value="{{$row->serialNo}}">{{$row->serialNo}}</option>
                                    @endforeach
                                </select>
                              </div>
                              <div class="form-group">
                                  <label>Date</label>
                                  <input type="date" class="form-control" name="date" required>
                              </div>
                              <div class="form-group">
                                  <textarea class="textarea" required placeholder=" Write Notes"style="width: 100%; height: 125px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;" name="note" value="{{old('note')}}"></textarea>
                              </div>
                        </div><!-- /.box-body -->
                        <div class="box-footer">
                            <button type="submit" class="btn btn-primary">Out Store <b>&rarr;</b></button>
                          </div>
                       </form>
                      </div>
                </div>
                <div class="col-md-6">
                    <div class="box-body">
                        @if(session('inError'))
                        @if ($errors->any())
                          <div class="alert alert-danger">
                              <center>
                                  @foreach ($errors->all() as $error)
                                      {{ $error }}<br>
                                  @endforeach
                              </center>
                          </div>
                        @endif
                    @endif
                    @if(session('in'))
                        @if(session('save'))
                        <div class="alert alert-success">
                            <center>
                               Products Added to Store Again Successfully
                            </center>
                        </div>
                        @endif   
                    @endif

                    <!-- form start -->
                    <form role="form" method="post" action="{{url('admin/takeProductInStore')}}" enctype="multipart/form-data">
                      {{csrf_field()}}
                      <div class="box-body">
                          <input type="hidden" name="id" value="{{$storeId}}">

                            <div class="form-group">
                              <label>Products Out Store</label>
                              <select multiple class="form-control" name="products[]" required>
                                  @foreach($OutDoorProducts as $row)
                                    <option>{{$row->serialNo}}</option>
                                  @endforeach
                              </select>
                            </div>
                            <div class="form-group">
                                <label>Date</label>
                                <input type="date" class="form-control" name="date" required>
                            </div>
                            <div class="form-group">
                                <textarea class="textarea" required placeholder=" Write Notes"style="width: 100%; height: 125px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;" name="note" value="{{old('note')}}"></textarea>
                            </div>
                          </div><!-- /.box-body -->

                      <div class="box-footer">
                          <button type="submit" class="btn btn-primary">Back To Store <b>&larr;</b></button>
                      </div>
                    </form>
                    </div>
                </div>
          </div>
          </section>