在 Laravel 5.4 中选择下拉菜单的选定值

6

我有一个叫做“职称”的下拉列表,用户会在其中选择一个选项,并提交表单。如果出现了错误,我希望能够重选之前选中的“职称”选项。

我在Laravel 5.4中使用这个功能。

控制器

$info = DB::table("designation")
                    ->where('status','=',1)
                    ->pluck("name","id");

        return view('regUser.add',['check' => 'userList','designation' => $info]);

查看文件
<div class="form-group {{ $errors->has('designation') ? ' has-error' : '' }}">
                            <label for="designation">Designation</label>
                            <select id="designation" name="designation" class="form-control">
                                <option value="">--- Select designation ---</option>
                                @foreach ($designation as $key => $value)

                                    <option value="{{ $key }}" />{{ $value }}</option>
                                @endforeach
                            </select>
                            @if ($errors->has('designation'))
                            <span class="help-block">
                                <strong>{{ $errors->first('designation') }}</strong>
                            </span>
                            @endif  
                        </div>

如果验证器发现错误,我希望选择先前选择的选项。如何在laravel 5.4中实现此目标。

提交表单后,它进入addUserInformation函数,在此处我验证用户信息,其中包含此代码片段。

 public function addUserInformation(Request $request){
            $this->validate($request, [
                'name' => 'required|string|min:5',
                'email' => 'required|string|email|unique:users,email',
                'designation' => 'required|exists:designation,id',
                'password'     => 'required|min:6',
                'confirm_password' => 'required|same:password',
                'userimage' => 'required|image',
            ]);
            $selectedID = $request->input('designation');
}

把这段代码放在你的选项标签里,它会检查你的旧值是否等于键,如果是,则添加selected属性:@if(old('designation')==$key) selected @endif - milo526
谢谢,这个也完美地运行了,和@Sandeesh的答案一样。 - Saroj
2个回答

9

Laravel在验证错误时会将输入传递回来。您可以使用old助手函数获取表单先前的值。简单的比较即可解决问题。

<div class="form-group {{ $errors->has('designation') ? ' has-error' : '' }}">
    <label for="designation">Designation</label>
    <select id="designation" name="designation" class="form-control">
        <option value="">--- Select designation ---</option>
        @foreach ($designation as $key => $value)
            <option value="{{ $key }}" {{ old('designation') == $key ? 'selected' : ''}}>{{ $value }}</option>
        @endforeach
    </select>
    @if ($errors->has('designation'))
        <span class="help-block">
            <strong>{{ $errors->first('designation') }}</strong>
        </span>
    @endif
</div>

@Saroj 哈哈,很高兴我能帮到你。 - Sandeesh

1

您需要使用return redirect()来维护旧输入的状态,例如:

return redirect('form')->withInput();

检索旧数据

要从上一个请求中检索已存储的输入,请在请求实例上使用 old 方法。

$oldDesignation = Request::old('designation');

并像这样检查它:

@foreach ($designation as $key => $value)
  $selected = '';
  @if( $value == $oldDesignation )
    $selected = 'selected="selected"';
  @endif
  <option value="{{ $key }}" {{ $selected }} />{{ $value }}</option>
@endforeach

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接