Laravel 5,如何测试控制器中是否选中了Checkbox

时间:2016-11-03 21:09:34

标签: php laravel

我试图通过以下方式检查复选框:

在我看来:

 <form data-toggle="validator" data-disable="false" role="form" action="/admin/role/add" method="post">
  <div class="checkbox checkbox-success">
   <input name="test" id="test" type="checkbox" value="test">
   <label for="test" style="padding-left: 15px!important;">test</label>
  </div>
 </form>
 <form data-toggle="validator" data-disable="false" role="form" action="/admin/role/add" method="post">
  {{ csrf_field() }}
  <div class="form-group pull-right">
     <button type="submit" class="btn btn-danger">Submit</button>
  </div>
 </form>

在我的控制器中:

public function createRole(Request $request)
{
    if( $request->has('test')) {
        new \App\Debug\Firephp('test', ['test' => true]);
    }
}
web.php中的

 Route::post('/admin/role/add', 'AdminController@createRole')

但不起作用。

我该怎么做?

感谢您的回复。

编辑1:

这是我的表格构建不佳

5 个答案:

答案 0 :(得分:5)

您可以使用以下方法进行测试:

if( Input::get('test', false) ) {
    // there is something for 'test'
} else {
    // there was no 'test' or it was false
}

或者

if( Request::input('test') ) { //...

或者

public function store(Request $request)
{
    if( $request->has('test') ){
        //...
    }
}

https://laravel.com/docs/5.0/requests

答案 1 :(得分:5)

我相信你真正的问题是你有两种不同的形式。您的复选框采用一种形式,您的提交按钮采用第二种形式。我相信它们都需要采用相同的形式。否则,永远不会返回您的复选框状态,无论其状态如何。

在您看来,请尝试替换您提供的表单标记:

<form data-toggle="validator" data-disable="false" role="form" action="/admin/role/add" method="post">
    <div class="checkbox checkbox-success">
        <input name="test" id="test" type="checkbox" value="test">
        <label for="test" style="padding-left: 15px!important;">test</label>
    </div>
    {{ csrf_field() }}
    <div class="form-group pull-right">
        <button type="submit" class="btn btn-danger">Submit</button>
    </div>
</form>

答案 2 :(得分:3)

复选框在选中时会发送信息 ,所以您检查是否存在该值。如果您使用Request $request方法而不是使用直接输入,则会更容易:

if (isset($request->test)) {
    // checked
}

Laravel docs:https://laravel.com/docs/5.0/requests

答案 3 :(得分:0)

我上了一堂课并把这个方法放进去了:

//This function is used to insert missing index key when checkboxes are used
public static function checkboxHelper($request_array, $key)
{
    if(!array_key_exists($key,$request_array)){
        $request_array[$key]=0;
    }
    else{
        $request_array[$key]=1;
    }

    return $request_array;
}

此方法从$ request对象获取数组并插入缺失键(复选框名称)。

答案 4 :(得分:0)

您可以检查复选框中的值,如下所示。

if ($request->checkbox_name) {
    // Do something
}