我正在尝试从编辑表单上的表单中检索旧值,但似乎无法找到答案,因为世界上的每个人都决定使用Form :: select from laravelcollective / html library。我正在尝试使用常规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>
答案 0 :(得分:0)
试试这个:
<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