6

我想知道 Laravel 的一些人是否可以提供帮助。

我有一个表单,其中有 2 个单选按钮,当表单提交时,它会通过验证器,如果验证器失败,它会返回表单,用输入填充字段并显示错误消息。

我似乎无法为单选按钮执行此操作,如果在提交表单时单击了一个并且出现错误,它会返回到表单并填写所有内容,除了已检查的单选按钮现在为空。

我的单选按钮如下:

<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>

任何帮助将不胜感激。

4

7 回答 7

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'));
于 2013-06-12T08:05:44.020 回答
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"; } ?> >
于 2013-06-12T07:53:13.460 回答
1

该错误是已知的: - https://github.com/laravel/laravel/issues/2069 - https://github.com/laravel/framework/issues/1564

您在第二个链接中有一个临时解决方案。

于 2013-06-12T08:02:46.960 回答
1

我刚刚偶然发现了这一点,我不想在每个表单上都重复这样的条件,所以我在我的 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”作为第三个参数传递,因此如果没有旧输入,它就会被选中。

于 2014-03-21T16:13:32.787 回答
1

与 Bootstrap 和自动检查一起使用

在文件末尾添加此代码: 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()) }}

最后结果:

在此处输入图像描述

于 2014-07-18T17:52:17.293 回答
0

我尝试简单地使用 Input::get() 而不是 Input::old().... 并且它有效!{{Form::radio('estado','V',(Input::get('estado')=="V"))}}

于 2015-02-16T06:20:47.310 回答
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 测试。

于 2019-02-05T21:09:40.220 回答