【问题标题】:Laravel 5 Form Model Binding RadiobuttonLaravel 5 表单模型绑定单选按钮
【发布时间】:2019-02-24 04:28:50
【问题描述】:

每个用户都应该有一个角色(只有一个)。为此,我使用 Spaties laravel-permission 包。

我在编辑和创建用户表单时使用了一堆单选按钮,您应该能够在其中为用户选择角色。我让它与复选框一起使用,但目前您可以选择多个复选框,从而为一个用户添加多个角色。现在我尝试使用单选按钮,它可以工作,但没有预先选择按钮。

这是我的复选框代码:

      @foreach ($roles as $role)
          @role('administrator')
              {!! Form::checkbox('roles[]', $role->id) !!}
              {!! Form::label($role->name, ucfirst($role->name)) !!}<br>
          @endrole
          @role('manager')
            @if(!($role->name == 'administrator'))
              {!! Form::checkbox('roles[]', $role->id) !!}
              {!! Form::label($role->name, ucfirst($role->name)) !!}<br>
            @endif
          @endrole
      @endforeach 

这里是我的单选按钮代码:

      @foreach ($roles as $role)
          @role('administrator')
              {!! Form::radio('roles[]', $role->id) !!}
              {!! Form::label($role->name, ucfirst($role->name)) !!}<br>
          @endrole
          @role('manager')
            @if(!($role->name == 'administrator'))
              {!! Form::radio('roles[]', $role->id) !!}
              {!! Form::label($role->name, ucfirst($role->name)) !!}<br>
            @endif
          @endrole
      @endforeach

【问题讨论】:

  • 创建一个选中的单选按钮。我认为您需要传入第三个参数。见这里laravelcollective.com/docs/5.4/…
  • 是的,我知道,但在我的复选框示例中,Laravel 是通过表单模型绑定为我完成的。单选按钮也应该可以,对吧?
  • 如果他们只能有 1 个角色,您为什么要尝试使用表单输入创建一个数组? roles[] 是一个数组(许多值).. 也许 role 会更好,单个值?
  • 你是对的,我使用控制器中的数组将用户与角色相关联,因为我之前可以选择多个角色。现在,我将控制器更改为仅使用一个选定的角色并将其与用户相关联,这样就可以了。但我仍然无法让它自动预选。

标签: php html laravel forms radio-button


【解决方案1】:

所以,小更新:

我使用控制器中的数组将用户与角色关联起来,因为之前我可以选择多个角色。现在我将控制器更改为仅使用一个选定的角色并将其与用户相关联,这样就可以了。

代码:

      @foreach ($roles as $role)
          @role('administrator')
              {!! Form::radio('role', $role->id, $employee->hasRole($role)) !!}
              {!! Form::label($role->name, ucfirst($role->name)) !!}<br>
          @endrole
          @role('manager')
            @if(!($role->name == 'administrator'))
              {!! Form::radio('role', $role->id, $employee->hasRole($role)) !!}
              {!! Form::label($role->name, ucfirst($role->name)) !!}<br>
            @endif
          @endrole
      @endforeach

控制器:

      $role = $request->get('role');
      $employee->syncRoles($role);

这行得通,但表单模型绑定的整个想法不是您不必手动完成吗?如果有人可以提供答案或更好的解决方案,那就太好了。

【讨论】:

    【解决方案2】:

    试试

    {!! Form::radio('role', $role->id, isset($employee) ? $employee->role_id === $role->id : false) !!}
    

    如果您有用户,请检查他们的角色 ID,如果它与循环中的相同,则标记为选中

    【讨论】:

    • 为什么投反对票?这就是您在用户表单中在 foreach 中预先选择某些内容的方式
    • 这段代码有语法错误。此外,您在这里创建一个表单“标签”而不是“输入”,所以我不确定这将完成什么。 FormBuilder@label 的第三个参数是 $options = [],HTML 标记的选项数组(HTML 属性)...
    • 是的,这些我都知道。我在功能上犯了一个错误。你可以指出这一点,就是这样.....
    【解决方案3】:

    您必须将第三个参数传递给函数 所以试试:

    {!! Form::radio('roles[]', $role->id, TRUE) !!}
    

    如果你需要先计算一些东西,你也可以用一个内联 if 语句代替

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2013-06-29
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      相关资源
      最近更新 更多