Иметь 2 формы на одной странице в Laravel?

Я пытаюсь решить проблему «две формы на одной странице» с моим PHP-кодом, но он оказался более крутым, чем я ожидал, и просто ведет себя не так, как я думал.

Для первой формы (логин) я использую этот оператор 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 на наличие другого значения для входа в систему.

@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');
    }
}

person Community    schedule 28.09.2017    source источник
comment
Я не видел, где вы показываете ошибку для второй формы, подобной этой $errors->first(), у вас есть код, только если у сеанса есть message   -  person Hanlin Wang    schedule 28.09.2017


Ответы (2)


Вы не обрабатываете ошибки проверки, а только возвращаемые сообщения, это должно делать это.

@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
person ggg    schedule 28.09.2017
comment
спасибо за это, я никогда не замечал этого. - person ; 28.09.2017

У меня есть две формы на одной странице, поэтому вы можете легко назначить ошибку каждой форме, используя флэш-сеанс в вашем контроллере, просто используйте сеанс, подобный этой строке.

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'));
    }
}
//===============

следующий код над каждой ошибкой, назначенной конкретной форме с использованием сеанса, это код просмотра блейд-кода, связанный с двумя формами

  <!-- 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>
person Ahmed Mahmoud    schedule 30.09.2018