Laravel 4,如何测试复选框是不是被选中?
Posted
技术标签:
【中文标题】Laravel 4,如何测试复选框是不是被选中?【英文标题】: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')
【参考方案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?
【讨论】:
这是最好的方法 这解决了我在登录时使用 Laravelremember_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 中,如果您查询未检查的参加局域网,您会得到未找到的变量。以上是关于Laravel 4,如何测试复选框是不是被选中?的主要内容,如果未能解决你的问题,请参考以下文章