Laravel 4 如何使用 input::old() 方法在下拉菜单中显示选定的值?
Laravel 4 How to show selected values in a dropdown menu by using the input::old() method?
我被这个困住了。
我正在使用 Laravel 4 和 select2 下拉菜单插件。
我有一个表单,用户可以从下拉菜单中选择一个或多个选项(select2 插件)。
如果验证失败,则用户将再次返回到表单。至于正确的输入,我希望表单保留下拉菜单中的 selected 值。
这对于用户必须只选择一个选项的下拉菜单来说进展顺利。我得到的代码如下:
<!-- Tipo de evento -->
<div class="form-group <?php if($errors->has('tipo_evento')){echo "has-error";}else if(Input::old('tipo_evento')) echo "has-success"; ?>">
<label for="tipo_evento" class="col-lg-2 control-label">Tipo</label>
<div class="col-lg-10">
<select multiple=""
class="select2 req_place form-control" placeholder="Elija" data-select-search="true"
id="tipo_evento" name="tipo_evento" ><!-- required="" -->
@foreach($tipo_evento as $key1=>$datum)
@foreach($datum as $key2=>$value)
@if($key2=='id')
<option value="{{$value}}" {{ (Input::old('tipo_evento')==$value) ? ' selected="" ' : ''}}>
@elseif($key2=='nombre')
{{$value}}</option>
@endif
@endforeach
@endforeach
</select>
@if($errors->has('tipo_evento'))
<p style="color: red;">{{$errors->first('tipo_evento')}}</p>
@endif
</div>
</div>
这很好,当返回表单时(如果出现错误)selected 选项仍然是 selected。
但是,对于多个select的情况,也就是说,当用户可以选择一个或多个选项时,没有任何反应,选项的none仍然是select编辑。
这是我的代码:
<!-- Lugar en donde fue el evento -->
<div class="form-group <?php if($errors->has('lugar')){echo "has-error";}else if(Input::old('lugar')) echo "has-success"; ?>">
<label for="select" class="col-lg-2 control-label">Lugar(es)</label>
<div class="col-lg-10">
<select multiple=""
class="select2 req_place form-control" placeholder="Elija" data-select-search="true"
id="lugar" name="lugar[]" ><!-- required="" -->
@foreach($lugares as $key1=>$datum)
@foreach($datum as $key2=>$value)
@if($key2=='id')
<option value="{{$value}}" {{ (Input::old('lugar[]')==$value) ? ' selected="" ' : ''}}>
@elseif($key2=='lugar')
{{$value}}</option>
@endif
@endforeach
@endforeach
</select>
<p style="color:blue;">{{Input::old('lugar[]')}}</p>
@if($errors->has('lugar'))
<p style="color: red;">{{$errors->first('lugar')}}</p>
@endif
</div>
</div>
我试过这个:
<option value="{{$value}}" {{ (Input::old('lugar[$value]')==$value) ? ' selected="" ' : ''}}>
还有这个:
<option value="{{$value}}" {{ (Input::old('lugar')==$value) ? ' selected="" ' : ''}}>
等等...
我找到了提示 here 但我正在尝试找出如何将变量设置为非常量或名称 ...
有解决此问题的想法吗?
试试 (Input::old('lugar.' . $key1)
或 (Input::old('lugar.' . $key2)
,我不太确定你在那里做什么。如果这没有帮助,您能否显示 Input::old('lugar')
和 $lugares
的 var_dump
编辑:
<!-- Lugar en donde fue el evento -->
<div class="form-group <?php if($errors->has('lugar')){echo "has-error";}else if(Input::old('lugar')) echo "has-success"; ?>">
<label for="select" class="col-lg-2 control-label">Lugar(es)</label>
<div class="col-lg-10">
<select multiple class="select2 req_place form-control" placeholder="Elija" data-select-search="true" id="lugar" name="lugar[]" >
@foreach($lugares as $key1=>$datum)
@foreach($datum as $key2=>$value)
@if($key2=='id')
<option value="{{$value}}" @if(is_array(Input::old('lugar')) && in_array($value, Input::old('lugar'))){{' selected'}}@endif>
@elseif($key2=='lugar')
{{$value}}</option>
@endif
@endforeach
@endforeach
</select>
<p style="color:blue;">{{Input::old('lugar[]')}}</p>
@if($errors->has('lugar'))
<p style="color: red;">{{$errors->first('lugar')}}</p>
@endif
</div>
</div>
你可以试试这个:
{{ Form::select('lugar[]', $tipo_evento, Input::old('lugar[]'), ['multiple' => true]) }}
无需手动循环。
这里有一些不必要的代码,可以很容易地清理掉。
在你的控制器中构建你的选项数组,以保存你视图中的所有混乱和乱七八糟的东西。那不是处理它的最佳场所。在您的控制器中,它可能看起来像这样...
$options = [];
foreach($lugares as $datum) {
foreach($datum as $value) {
$options[$value['id']] = $value['lugar'];
}
}
并确保将 $options
传递到您的视图中。那么你的看法就变得很简单了!
{{ Form::select('lugar[]', $options, Input::old('lugar'), array('multiple' => true, 'class' => 'select2 req_place form-control', 'placeholder' => 'Elija', 'data-select-search' => 'true', 'id' => 'lugar')) }}
我被这个困住了。
我正在使用 Laravel 4 和 select2 下拉菜单插件。
我有一个表单,用户可以从下拉菜单中选择一个或多个选项(select2 插件)。
如果验证失败,则用户将再次返回到表单。至于正确的输入,我希望表单保留下拉菜单中的 selected 值。
这对于用户必须只选择一个选项的下拉菜单来说进展顺利。我得到的代码如下:
<!-- Tipo de evento -->
<div class="form-group <?php if($errors->has('tipo_evento')){echo "has-error";}else if(Input::old('tipo_evento')) echo "has-success"; ?>">
<label for="tipo_evento" class="col-lg-2 control-label">Tipo</label>
<div class="col-lg-10">
<select multiple=""
class="select2 req_place form-control" placeholder="Elija" data-select-search="true"
id="tipo_evento" name="tipo_evento" ><!-- required="" -->
@foreach($tipo_evento as $key1=>$datum)
@foreach($datum as $key2=>$value)
@if($key2=='id')
<option value="{{$value}}" {{ (Input::old('tipo_evento')==$value) ? ' selected="" ' : ''}}>
@elseif($key2=='nombre')
{{$value}}</option>
@endif
@endforeach
@endforeach
</select>
@if($errors->has('tipo_evento'))
<p style="color: red;">{{$errors->first('tipo_evento')}}</p>
@endif
</div>
</div>
这很好,当返回表单时(如果出现错误)selected 选项仍然是 selected。
但是,对于多个select的情况,也就是说,当用户可以选择一个或多个选项时,没有任何反应,选项的none仍然是select编辑。 这是我的代码:
<!-- Lugar en donde fue el evento -->
<div class="form-group <?php if($errors->has('lugar')){echo "has-error";}else if(Input::old('lugar')) echo "has-success"; ?>">
<label for="select" class="col-lg-2 control-label">Lugar(es)</label>
<div class="col-lg-10">
<select multiple=""
class="select2 req_place form-control" placeholder="Elija" data-select-search="true"
id="lugar" name="lugar[]" ><!-- required="" -->
@foreach($lugares as $key1=>$datum)
@foreach($datum as $key2=>$value)
@if($key2=='id')
<option value="{{$value}}" {{ (Input::old('lugar[]')==$value) ? ' selected="" ' : ''}}>
@elseif($key2=='lugar')
{{$value}}</option>
@endif
@endforeach
@endforeach
</select>
<p style="color:blue;">{{Input::old('lugar[]')}}</p>
@if($errors->has('lugar'))
<p style="color: red;">{{$errors->first('lugar')}}</p>
@endif
</div>
</div>
我试过这个:
<option value="{{$value}}" {{ (Input::old('lugar[$value]')==$value) ? ' selected="" ' : ''}}>
还有这个:
<option value="{{$value}}" {{ (Input::old('lugar')==$value) ? ' selected="" ' : ''}}>
等等...
我找到了提示 here 但我正在尝试找出如何将变量设置为非常量或名称 ...
有解决此问题的想法吗?
试试 (Input::old('lugar.' . $key1)
或 (Input::old('lugar.' . $key2)
,我不太确定你在那里做什么。如果这没有帮助,您能否显示 Input::old('lugar')
和 $lugares
编辑:
<!-- Lugar en donde fue el evento -->
<div class="form-group <?php if($errors->has('lugar')){echo "has-error";}else if(Input::old('lugar')) echo "has-success"; ?>">
<label for="select" class="col-lg-2 control-label">Lugar(es)</label>
<div class="col-lg-10">
<select multiple class="select2 req_place form-control" placeholder="Elija" data-select-search="true" id="lugar" name="lugar[]" >
@foreach($lugares as $key1=>$datum)
@foreach($datum as $key2=>$value)
@if($key2=='id')
<option value="{{$value}}" @if(is_array(Input::old('lugar')) && in_array($value, Input::old('lugar'))){{' selected'}}@endif>
@elseif($key2=='lugar')
{{$value}}</option>
@endif
@endforeach
@endforeach
</select>
<p style="color:blue;">{{Input::old('lugar[]')}}</p>
@if($errors->has('lugar'))
<p style="color: red;">{{$errors->first('lugar')}}</p>
@endif
</div>
</div>
你可以试试这个:
{{ Form::select('lugar[]', $tipo_evento, Input::old('lugar[]'), ['multiple' => true]) }}
无需手动循环。
这里有一些不必要的代码,可以很容易地清理掉。
在你的控制器中构建你的选项数组,以保存你视图中的所有混乱和乱七八糟的东西。那不是处理它的最佳场所。在您的控制器中,它可能看起来像这样...
$options = [];
foreach($lugares as $datum) {
foreach($datum as $value) {
$options[$value['id']] = $value['lugar'];
}
}
并确保将 $options
传递到您的视图中。那么你的看法就变得很简单了!
{{ Form::select('lugar[]', $options, Input::old('lugar'), array('multiple' => true, 'class' => 'select2 req_place form-control', 'placeholder' => 'Elija', 'data-select-search' => 'true', 'id' => 'lugar')) }}