【问题标题】:Laravel how to test if a checkbox is checked in a controllerLaravel如何测试控制器中是否选中了复选框
【发布时间】:2021-08-25 14:53:16
【问题描述】:

我试图获取是否选中了复选框:

在我看来:

<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:

这是我的表单构建不佳。

【问题讨论】:

  • 我认为您的表单没有被发布?你已经在你的控制器中引用了外观?我发现类型提示 Request 在这些情况下更适合我。
  • 是的,我使用 POST 方法@Kurucu
  • 这应该可以工作,也可以试试if( Input::has('test')) 。当然,如果你使用的是 Laravel 5,那么使用 Request::input('test');或类型提示是前进的方向:laravel.com/docs/5.0/requests
  • $request->has('test') 对我不起作用@Kurucu
  • 在下面查看我的答案,看看如何 - 你需要一个特殊的函数定义。

标签: php laravel


【解决方案1】:

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

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

【讨论】:

  • 我已经做到了: public function createRole(Request $request) { if( $request->has('test')) { new \App\Debug\Firephp('name_role', [' name_role' =>'true']); } 新 \App\Debug\Firephp('name_role', ['name_role' => $request->input('name_role')]); }
  • 但是 if( $request->has('test') return false @Kurucu
  • 你能发布你的html表单吗?和你的控制器代码(每个的sn-ps,如果需要的话)?
【解决方案2】:

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

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

<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>

【讨论】:

  • 非常感谢,但我们不能有两个具有相同操作的表单吗?
  • 表格就像一个盒子,你可以在里面放入你想要携带的价值(或价值)。如果您将“复选框”放在一个框中,但携带(提交)另一个框,则那里没有复选框。
【解决方案3】:

Checkbox 在选中时发送信息,因此您要做的就是检查该值是否存在。如果您使用 Request $request 的方法比使用直接输入更容易:

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

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

【讨论】:

  • 我遇到的另一件事。如果在input 标签内错误地留下了value='',即使手动检查它也不会将输入变为“设置”!?删除它,现在可以正常工作了。
【解决方案4】:

我做了一个类,把这个方法放进去:

//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 对象中获取数组并插入缺少的键(复选框名称)。

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

      你可以使用它

      $request->test ? $request->test : 'false';
      

      【讨论】:

        猜你喜欢
        • 2013-12-08
        • 2017-05-04
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 2013-10-28
        相关资源
        最近更新 更多