Отправка модальной формы в то время как другая форма открыта в Laravel 5.6 - PullRequest
0 голосов
/ 26 августа 2018

Что у меня есть:

У меня есть веб-приложение, в котором я хочу добавить квалификацию пользователю.

Когда я открываю Изменить сотрудника В форме есть кнопка Добавить и кнопка Удалить рядом с полем выбора, отображающим все квалификации, связанные с этим пользователем.При нажатии на кнопку «Добавить» открывается модальный Bootstrap с другой формой, в которой вы можете выбрать Квалификация , а также Дата выпуска .

Что я хочу:

Пока я хочу, чтобы квалификация была добавлена ​​к пользователю, а затем позволила контроллеру перенаправить в представление редактирования с сообщением об успехе.Позже я хотел бы добавить квалификацию через Ajax, закрыть окно и вывести сообщение об успехе.Возможно, по возможности обновите только элемент формы Квалификации в главной форме.

Проблема:

Когда я отправляю форму вмодальное, основная форма get отправлена, а не модальная, хотя я вызываю разные методы контроллера при отправке.

Мои формы:

Модальные:

<link href="{{ asset('css/modals.css') }}" media="all" rel="stylesheet" type="text/css" />

<div class="modal fade" id="qualificationModal" tabindex="-1" role="dialog" aria-labelledby="qualificationModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
        <h4 class="modal-title" id="qualificationModalLabel" style='font-weight: bold;'>Add Qualification</h4>
      </div>
      <div class="modal-body">

        {!! Form::open(['route' => ['qualification.add', $employee->id], 'method' => 'PUT']) !!}

        <div class="form-group">
          {{ Form::label('qualification', 'Qualification') }}<br>
          {{ Form::select('qualification', $qualification_names, null, array('class' => 'form-control', 'required' => 'required')) }}
        </div>

        <div class="form-group">
          {{ Form::label('issue_date', 'Date Of Issue') }}<br>
          {{ Form::date('issue_date', \Carbon\Carbon::now(), array('class' => 'form-control', 'required' => 'required')) }}
        </div>

      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        {!! Form::submit('Add', array('class' => 'btn btn-primary')) !!}
      </div>
    </div>
  </div>
</div>

Основной:

@section('content')
  <div class='col-lg-4 col-lg-offset-4'>

      <h1><i class='fa fa-user-plus'></i> Edit {{$employee->name}}</h1>
      <hr>

      {{ Form::model($employee, ['route' => ['employees.update', $employee->id], 'method' => 'PUT']) }}

      <div class="form-group">
          {{ Form::label('name', 'Name') }}
          {{ Form::text('name', null, array('class' => 'form-control', 'required' => 'required')) }}
      </div>

      <div class="form-group">
          {{ Form::label('email', 'Email') }}
          {{ Form::email('email', null, array('class' => 'form-control', 'required' => 'required')) }}
      </div>

      <h5><b>Give Role</b></h5>

      <div class='form-group'>
          @foreach ($roles as $role)
              {{ Form::checkbox('roles[]',  $role->id, $employee->roles ) }}
              {{ Form::label($role->name, ucfirst($role->name)) }}<br>
          @endforeach
      </div>

      <div class="form-group">
          {{ Form::label('password', 'Password') }}<br>
          {{ Form::password('password', array('class' => 'form-control', 'placeholder' => ' • • • • • • • • • •', 'required' => 'required')) }}
      </div>

      <div class="form-group">
          {{ Form::label('password', 'Confirm Password') }}<br>
          {{ Form::password('password_confirmation', array('class' => 'form-control', 'required' => 'required')) }}
      </div>

      <div class="form-group">
          {{ Form::label('qualifications', 'Qualifications') }}<br>
          {{ Form::select('qualifications', $employee->qualifications, null, ['size' => 5, 'class' => 'form-control']) }}
          <button
             type="button"
             class="btn btn-default pull-right"
             data-toggle="modal"
             data-target="#qualificationModal"
             data-qualifications="{{ $qualifications }}"
             data-qualification_names="{{ $qualification_names }}">
             Add
          </button>
          <button type="button" class="btn btn-danger pull-right">Remove</button>
          @include('dispo.employees.add_qualification')

          <br>
          <br>
      </div>


      {{ Form::submit('Save', array('class' => 'btn btn-primary')) }}

      {{ Form::close() }}

  </div>
@stop

Маршруты:

Route::put('', [
  'as' => 'qualification.add',
  'uses' => 'DispoEmployeeController@addQualification'
]);

Route::resource('employees', 'Dispo\DispoEmployeeController');

Контроллер

public function update(Request $request, $id){
    $employee = User::findOrFail($id); 

    //Validate name, email and password fields
    $this->validate($request, [
        'name'=>'required|max:120',
        'email'=>'required|email|unique:users,email,'.$id,
        'password'=>'required|min:6|confirmed',

    ]);
    $input = $request->only(['name', 'email', 'password']);
    $roles = $request->get('roles'); //Retreive all roles
    $employee->fill($input)->save();

    if (isset($roles)) {
        $employee->syncRoles($roles); 
    }
    else {
        $employee->roles()->detach(); 
    }
    return redirect()->route('employees.index')->with('success','User successfully edited.');
}

public function addQualification(Request $request, $id){
  $employee = User::findOrFail($id);

  $this->validate($request, [
  ]);

  $qualification = $request->input('qualification');

  $employee->qualifications()->attach($qualification);

  return redirect()->route('employees.edit')->with('success','Qualification successfully edited.');
}

1 Ответ

0 голосов
/ 26 августа 2018

Я сделал предположение в этом ответе, поэтому, если это не так, дайте мне знать, и я могу приспособиться.

Предположение: ваш модал добавляется на страницу через частичку лезвия @include('dispo.employees.add_qualification').

Если это то, как модал включается, то ваша модальная форма вложена в основную форму (что объясняет, почему основная форма отправляется).

Решение: переместите ваш модал за пределы основной формы, сместив @include('dispo.employees.add_qualification'), чтобы быть ниже {{ Form::close() }} в основном файле блейда.

...