使用Laravel / Blade中的旧输入定义所选选项

时间:2015-03-19 15:11:14

标签: laravel laravel-4 blade

我有这段代码:

<select required="required" class="form-control" name="title">
    <option></option>
    @foreach ($titles as $key => $val)
        @if (stristr($key, 'isGroup'))
            <optgroup label="{{ $val }}">
        @else
        <option value="{{ $key }}">{{ $val }}</option>
        @endif
    @endforeach
    </select>

因此,当表单出错时,我会使用行Redirect::route('xpto')->withInput()->withErrors($v)。但我不能重新填充选择字段。没有使用JavaScript的任何方法吗?

16 个答案:

答案 0 :(得分:48)

此外,您可以使用?运算符来避免使用@if @else @endif语法。变化:

@if (Input::old('title') == $key)
      <option value="{{ $key }}" selected>{{ $val }}</option>
@else
      <option value="{{ $key }}">{{ $val }}</option>
@endif

简单地说:

<option value="{{ $key }}" {{ (Input::old("title") == $key ? "selected":"") }}>{{ $val }}</option>

答案 1 :(得分:10)

解决方案是将Input::old()$key变量进行比较。

@if (Input::old('title') == $key)
      <option value="{{ $key }}" selected>{{ $val }}</option>
@else
      <option value="{{ $key }}">{{ $val }}</option>
@endif

答案 2 :(得分:7)

在玩了一下之后,我想出了这个,它看起来非常出色

<select name="options[]" id="options" class="form-control" multiple>
    @foreach($settings->includes->get('optionList') as $option)
        <option value="{{ $option->id }}" {{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}>{{ $option->name }}</option>
    @endforeach
</select>

我在利用collect函数方面可能100%错误,但它在我的许多测试中都能正常工作。在网站上看到一些其他帖子后,我看到有人建议利用in_array($ needle,$ array)函数,但在注意到如果我的旧('options')为null之后会出错,因为它需要in_array要求,打赌你猜到一个阵列。因此,在找到解决方案之后,虽然我使用了收集方法,但我们正在使用larval,因为我们正在使用larval。好吧无论如何丑陋的解决方案如下

@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif

内联,但对我来说看起来很难看的男人这么长的故事,我正在使用以下代替

{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}

希望这有助于其他人!!

这对于非多重选择字段似乎不起作用,但是可以使用一个可以为此工作的字段。

答案 3 :(得分:7)

<select name="gender" class="form-control" id="gender">
                                <option value="">Select Gender</option>
                                <option value="M" @if (old('gender') == "M") {{ 'selected' }} @endif>Male</option>
                                <option value="F" @if (old('gender') == "F") {{ 'selected' }} @endif>Female</option>
                            </select>

答案 4 :(得分:4)

Laravel 6或更高版本:仅将old()函数用于实例 @if(old('cat')== $ cat-> id) ,它将为您完成其余工作。

其工作原理: select标记将选定的选项值存储在其name属性中,如果您选择任何选项,它将存储在 cat 。第一次加载页面时,cat内没有任何内容,当用户选择一个选项时,该所选选项的值将存储到cat中,因此当用户被重定向时 old() 函数从cat中提取先前的值。

 {!!Form::open(['action'=>'CategoryController@storecat', 'method'=>'POST']) !!}
        <div class="form-group">
            <select name="cat" id="cat" class="form-control input-lg">
                <option value="">Select App</option>
                @foreach ($cats as $cat)
                    @if (old('cat')==$cat->id)
                        <option value={{$cat->id}} selected>{{ $cat->title }}</option>
                    @else
                        <option value={{$cat->id}} >{{ $cat->title }}</option>
                    @endif
                @endforeach
            </select>
        </div>

        <div class="from-group">
            {{Form::label('name','Category name:')}}
            {{Form::text('name','',['class'=>'form-control', 'placeholder'=>'Category name'])}}
        </div>
    <br>
    {!!Form::submit('Submit', ['class'=>'btn btn-primary'])!!}
    {!!Form::close()!!}

答案 5 :(得分:3)

最好的方法是关注

r.json()

答案 6 :(得分:2)

除了使用Input类之外,您还可以使用old()帮助程序来缩短它。

<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">

答案 7 :(得分:2)

      <select class="form-control" name="kategori_id">
        <option value="">-- PILIH --</option>
        @foreach($kategori as $id => $nama)
            @if(old('kategori_id', $produk->kategori_id) == $id )
            <option value="{{ $id }}" selected>{{ $nama }}</option>
            @else
            <option value="{{ $id }}">{{ $nama }}</option>
            @endif
        @endforeach
        </select>

答案 8 :(得分:1)

<option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>

答案 9 :(得分:1)

我的解决方案是循环,只是为了避免重复选项

                            <select class="form-control" name="status" >
                              <?php $lists = ['Current', 'Win', 'Lose']; ?>

                              @foreach($lists as $list)
                              <option value={{$list}} {{(old('status') == $list?'selected':'')}} >{{$list}}</option>
                              @endforeach

                            </select>

答案 10 :(得分:1)

这将为您提供帮助,只需与old(如果存在)进行比较,如果不存在,则与默认值进行比较

<select name="select_name">
    @foreach($options as $key => $text)
       <option {{ ($key == old('select_name',$default))?'selected':'' }}> {{ $text }} </option>
    @endforeach
</select>

$default是从控制器注入到视图的值

答案 11 :(得分:1)

<select style="width: 100%;" name="id_driver" id="id_driver" >
  <option value="" @if (old('id_driver') == "")  selected @endif>Select</option>
  @foreach(\App\Driver::all() as $driver)
    <option value="{{$driver->id}}" @if (old('id_driver') == $driver->id)  
        selected  @endif >(#{{$driver->id}}) {{$driver->business_name}}
    </option>
  @endforeach
</select>

答案 12 :(得分:0)

<div class="ma-subnav__item" data-turbolinks="false">
            <div class="content" data-turbolinks="false">                                        
                <ul class="normal-ul" data-turbolinks="false">
<li class="dropdown" data-turbolinks="false">
  <a href="#" data-turbolinks="false" class="link-reset" data-toggle="dropdown">Information <i class="icon-arrow"></i></a>
  <ul class="dropdown-menu" data-turbolinks="false">
    <li><%= link_to "Why", welcome_why_path, class: "link-reset" %></li>
    <li><%= link_to "How", welcome_how_path, class: "link-reset" %></li>
    <li><%= link_to "Resources", welcome_resources_path, class: "link-reset" %></li>
    <li><%= link_to "Contact Us", welcome_feedback_path, class: "link-reset" %></li>
  </ul>
</li></ul>
            </div>
        </div>       

答案 13 :(得分:0)

好的,我的2美分,使用Laravel的old()函数的默认值。

public class ActivityA extends Activity {

 private void gotoActivityB(){
   startActivityForResult(new Intent(this,ActivityB.class),101);
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == 101 {
    if (resultCode == RESULT_OK) {
        String value = data.getStringExtra("KEY");
     }
 }

 }
}



public class ActivityB extends Activity {
      @Override
      protected void onDestroy() {
      super.onDestroy();
      Intent intent = new Intent();
      intent.putExtra("KEY",editTextValue);
      setResult(Activity.RESULT_OK,intent);
    }
}

答案 14 :(得分:0)

这很容易理解和实施。

 <select class="form-control m-input m-input--air">
     @foreach ($countries as $key)
        @if( $key->name == $user->country )
            <option value="{{ $key->name }}" selected="selected"> {{ $key->name }}</option>
        @else
            <option value="{{ $key->name }}"> {{ $key->name }}</option>
        @endif
     @endforeach   
 </select>

答案 15 :(得分:0)

考虑到用户也想编辑他们之前的输入,

<select name="title">
  @foreach ($titles as $key => $value)
    <option value="{{$value->id}}" {{(old('title', $user->title_id) == $value->id ? 'selected' : '')}} > {{$value->name}} </option>
  @endforeach
</select>

old('title', $user->title_id) 第一次返回用户保存的 title_id,如果验证失败则返回用户选择的 title_id。然后如果它与当前选项ID匹配,则它被选中。