Laravel 4.1.x中具有相同ID的单选按钮

时间:2014-06-17 14:46:38

标签: php laravel

我有这段代码:

<div class="form-group  {{ (isset($errors) AND $errors->has('indicacao_interna')) ? 'has-error' : '' }}">
  {{ Form::label('indicacao_interna', 'Indicação Interna', array('class' => 'col-lg-4 control-label')) }}
  <div class="col-lg-3">
    <div>

      <label class='radio-inline'>{{ Form::radio('indicacao_interna', 1, oldRadio('indicacao_interna', 1, true)) }} Sim</label>
      <label class='radio-inline'>{{ Form::radio('indicacao_interna', 0, oldRadio('indicacao_interna', 0, true)) }} Não</label>
      @include('partials.validators.message_field', array('field' => 'indicacao_interna'))
    </div>
  </div>
</div>

它会生成以下代码:

<div class="form-group  ">
  <label for="indicacao_interna" class="col-lg-4 control-label">Indicação Interna</label>                <div class="col-lg-3">
  <div>

    <label class="radio-inline"><input checked="checked" name="indicacao_interna" type="radio" value="1" id="indicacao_interna"> Sim</label>
    <label class="radio-inline"><input name="indicacao_interna" type="radio" value="0" id="indicacao_interna"> Não</label>
  </div>
</div>

如您所见,单选按钮具有相同ID 。这是错的,对吗?

并且...为什么收音机会生成相同的ID?不只是一个名字?


  • Laravel 4.1
  • Apache 2.4
  • PHP 5.4.17

对不起我的英文...谢谢

2 个答案:

答案 0 :(得分:1)

Tenta assim:

{{ Form::radio('indicacao_interna', 1, oldRadio('indicacao_interna', 1, true),
    array('id' => 'indicacao_interna_1')) }}

{{ Form::radio('indicacao_interna', 1, oldRadio('indicacao_interna', 1, true), 
    array('id' => 'indicacao_interna_2')) }}

答案 1 :(得分:1)

是的,这是自动代码创建的一小部分。在幕后,Form::radio()为输入调用相同的$this->input($type, $name, $value = null, $options = array())常规函数,内部调用:

$id = $this->getIdAttribute($name, $options);

方法getIdAttribute()具有以下定义:

public function getIdAttribute($name, $attributes)
{
    if (array_key_exists('id', $attributes))
    {
        return $attributes['id'];
    }

    if (in_array($name, $this->labels))
    {
        return $name;
    }
}

这意味着,如果它在提供的选项中找到指定的ID,则返回该值,否则返回该名称。

对于其他输入类型而言,这是一个舒适且完全有效的解决方案,但对于无线电和复选框无效,您需要提供自己的ID。

{{ Form::radio('indicacao_interna', 1, oldRadio('indicacao_interna', 1, true),
    array('id' => 'custom_id')) }}