【问题标题】:Laravel 4, how to test if a Checkbox is checked?Laravel 4,如何测试复选框是否被选中?
【发布时间】:2013-12-08 17:52:10
【问题描述】:

我正在尝试查看我的控制器中是否选中了复选框。我读过这是执行此操作的代码

if (Input::get('attending_lan', true))

但即使未选中复选框,它也会返回 true。

【问题讨论】:

  • Input::get('attending_lan', false) 可以工作,或者Input::get('attending_lan', '0')

标签: php checkbox laravel laravel-4


【解决方案1】:
if(filter_var(Input::get('attending_lan'), FILTER_VALIDATE_BOOLEAN)){

FILTER_VALIDATE_BOOLEAN 过滤器将值验证为布尔选项。

可能的返回值:

  • 对于“1”、“true”、“on”和“yes”、和大写版本返回 TRUE。
  • 对于“0”、“false”、“off”和“no”、和大写版本返回 FALSE。
  • 否则返回 NULL。

来源:http://www.w3schools.com/php/filter_validate_boolean.asp

【讨论】:

    【解决方案2】:

    另一种方法是检查数组键以查看它是否存在,因为如果不检查 Input::get('key') 可能会给您带来问题,因为它在 Input 数组中的索引未定义。

    $input = Input::all();
    if(array_key_exists($input('key',$input)){
    // Checked
    }else{
    // Not Checked
    }
    

    或者..类似的东西。我有点草率,但我希望它可以帮助某人。

    【讨论】:

      【解决方案3】:

      使用Input::has('attending_lan')

      一般来说,如果勾选了复选框,请求变量就会存在。如果不是这种情况,则说明代码中的其他地方有问题。

      也相关:Does <input type="checkbox" /> only post data if it's checked?

      【讨论】:

      • 这是最好的方法
      • 这解决了我在登录时使用 Laravel remember_me 的问题。
      • 完美解决方案
      【解决方案4】:

      假设您的视图中有此表单代码:

      // view.blade.php
      {{ Form::open() }}
          {{ Form::checkbox('attending_lan', 'yes') }}
          {{ Form::submit('Send') }}
      {{ Form::close() }}
      

      你可以像这样获取复选框的值:

      if (Input::get('attending_lan') === 'yes') {
          // checked
      } else {
          // unchecked
      }
      

      这里的关键是您必须在视图中创建复选框时设置一个值(在示例中,值将是yes),然后在您的控制器中检查该值。

      【讨论】:

      • 还需要注意的是,如果不勾选attaching_lan,是不会报错的。这与标准 PHP 不同,在标准 PHP 中,如果您查询未检查的参加局域网,您会得到未找到的变量。
      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2017-09-14
      相关资源
      最近更新 更多