Laravel selected-select, извлекающий старое значение из формы - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь получить старое значение из моей формы в форме редактирования, но кажется невозможным найти ответ, потому что все в мире решили использовать Form :: select из библиотеки laravelcollective / html. Я пытаюсь использовать обычный HTML для работы, и он не может извлечь старое значение из формы.

Это мой HTML-код.

                        <div class="col-xs-12 form-group">
                            <label class="control-label">Role*</label>
                            <select name="roles[]" data-placeholder="Choose a Role for this User..." class="chosen-select" multiple tabindex="4">
                                <option value="">Select</option>
                                @foreach ($roles as $key => $value)
                                    <option value="{{ $key }}" {{ in_array($key, old("roles")) ? "selected":"") }} >{{ $value }}</option>
                                @endforeach
                            </select>
                        </div>

Это код моего контроллера.

public function edit($id)
{
    $roles = Role::get()->pluck('name', 'id');
    $user = User::findOrFail($id);
    return view('admin.users.edit', compact('user', 'roles'));
}

Я пытаюсь преобразовать следующее в обычный HTML

<div class="row">
            <div class="col-xs-12 form-group">
                {!! Form::label('role', trans('global.users.fields.role').'*', ['class' => 'control-label']) !!}
                {!! Form::select('role[]', $roles, old('role') ? old('role') : $user->role->pluck('id')->toArray(), ['class' => 'form-control select2', 'multiple' => 'multiple', 'required' => '']) !!}
                <p class="help-block"></p>
                @if($errors->has('role'))
                    <p class="help-block">
                        {{ $errors->first('role') }}
                    </p>
                @endif
            </div>
        </div>

1 Ответ

0 голосов
/ 29 апреля 2018

Попробуйте это:

<div class="col-xs-12 form-group {{ $errors->has('role') ? 'has-error' : '' }}">
  <label for="role" class="control-label">Role *</label>

  <select class="form-control select2" name="role[]" id="role" required multiple>
    @foreach ($roles as $id => $label)
      <option value="{{ $id }}" @if (collect(old('role', $user->role->pluck('id') ?? []))->contains($id)) selected="selected" @endif>{{ $label }}</option>
    @endforeach
  </select>

  <span class="help-block">
  @if ($errors->has('role'))
    {{ $errors->first('role') }}
  @endif
  </span>
</div>

В функции обновления / сохранения вашего контроллера убедитесь, что вы используете встроенные методы проверки, которые заполняют сеанс при любых ошибках.

или

Если у вас есть другие проверки, убедитесь, что вы возвращаете ввод при перенаправлении назад.

return redirect()->back()
    ->withInput() // <- return input with redirect, will populate session
    ->with('error', 'Persist failed'); // <- optional 
...