我想知道一些Laravel家伙是否可以提供帮助。
我有一个表单,其中我有2个单选按钮,当表单提交它通过验证器时,如果验证器失败它返回到表单,填充输入字段并显示错误消息。
我似乎无法为单选按钮执行此操作,如果在提交表单时单击了一个并且出现错误,则会返回到表单中并填写所有内容除了已选中的单选按钮现在为空。< / p>
我的单选按钮如下:
<input type="radio" name="genre" value="M" class="radio" id="male" />
<input type="radio" name="genre" value="F" class="radio" id="female" />
<span class="error">{{ $errors->first('genre') }}</span>
非常感谢任何帮助。
答案 0 :(得分:19)
你可以使用Laravel开箱即用的HTML收音机试试这个... Laravel Docs Form checkboxes and Radio
使用刀片,
{{ Form::radio('genre', 'M', (Input::old('genre') == 'M'), array('id'=>'male', 'class'=>'radio')) }}
{{ Form::radio('genre', 'F', (Input::old('genre') == 'F'), array('id'=>'female', 'class'=>'radio')) }}
或者只是php,
echo Form::radio('genre', 'M', (Input::old('genre') == 'M'), array('id'=>'male', 'class'=>'radio'));
echo Form::radio('genre', 'F', (Input::old('genre') == 'F'), array('id'=>'female', 'class'=>'radio'));
答案 1 :(得分:12)
你可以这样做:
<input type="radio" name="genre" value="M" class="radio" id="male" <?php if(Input::old('genre')== "M") { echo 'checked="checked"'; } ?> >
<input type="radio" name="genre" value="F" class="radio" id="female" <?php if(Input::old('genre')== "F") { echo 'checked="checked"; } ?> >
答案 2 :(得分:1)
该错误已知: - https://github.com/laravel/laravel/issues/2069 - https://github.com/laravel/framework/issues/1564
您在第二个链接中有一个临时解决方案。
答案 3 :(得分:1)
我偶然发现了这一点,我不想在每个表单上重复这些条件,所以我在Helper类上创建了一个函数。
Helper.php:
class Helper {
// other functions
public static function oldRadio($name, $value, $default = false) {
if(empty($name) || empty($value) || !is_bool($default))
return '';
if(null !== Input::old($name)) {
if(Input::old($name) == $value) {
return 'checked';
} else {
return '';
}
} else {
if($default) {
return 'checked';
} else {
return '';
}
}
// Or, short version:
return null !== Input::old($name) ? (Input::old($name) == $value ? 'checked' : '') : ($default ? 'checked' : '');
}
}
所以,现在在我的表格中,我只是这样使用它:
<label>Please select whatever you want</label>
<div class="radio-inline"><label><input type="radio" name="whatever" value="1" required {{ Helper::oldRadio('whatever', '1', true) }}> One</label></div>
<div class="radio-inline"><label><input type="radio" name="whatever" value="2" {{ Helper::oldRadio('whatever', '2') }}> Two</label></div>
<div class="radio-inline"><label><input type="radio" name="whatever" value="3" {{ Helper::oldRadio('whatever', '3') }}> Three</label></div>
每个选项都将其名称和值传递给辅助函数,之前选择的选项将打印“已检查”。此外,一个选项可以传递'true'作为第三个参数,因此如果没有旧输入,它将被选中。
答案 4 :(得分:1)
使用Bootstrap&amp;自动检查
在文件末尾添加此代码: app / start / global.php
//...
Form::macro('radio2', function($group ='group-name', $value_model = 'value-model', $label ='label-radio', $value_radio = 'value-radio', $attrs = array())
{
$item = "<div class='radio'>";
$item .= "<label>";
$item .= Form::radio($group, $value_radio, ($value_model == $value_radio) ? true : false, $attrs);
$item .= $label;
$item .= "</label>";
$item .= "</div>";
return $item;
});
在你的view.php中
{{ Form::radio2('status', Input::old('status'), 'Online', '1', array()) }}
{{ Form::radio2('status', Input::old('status'), 'Offline', '0', array()) }}
最终结果:
答案 5 :(得分:0)
我尝试过简单地使用Input :: get()而不是Input :: old()....并且它工作正常!! {{Form::radio('estado','V',(Input::get('estado')=="V"))}}
答案 6 :(得分:0)
我的方法是使用刀片语法嵌套的简写if / else语句。该解决方案还考虑了在数据库中设置的初始值。
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="sex" id="male" value="male"{!! ((old('sex') == 'male') ? ' checked="checked"' : ((empty(old('sex')) && $user->sex == 'male') ? ' checked="checked"' : '')) !!}/>
<label class="form-check-label" for="male">Männlich</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="sex" id="female" value="female"{!! ((old('sex') == 'female') ? ' checked="checked"' : ((empty(old('sex')) && $user->sex == 'female') ? ' checked="checked"' : '')) !!}/>
<label class="form-check-label" for="female">Weiblich</label>
</div>
经Laravel 5.7测试。