【问题标题】:Laravel 5.6 controller post action methods truncates boolean valueLaravel 5.6 控制器后操作方法截断布尔值
【发布时间】:2018-06-14 00:19:46
【问题描述】:

我正在向 Laravel 控制器发布 AJAX 帖子,如下所示。

<script>
    let data = {
       a: true,
       b: false
    }

    this.axios.post(this.url, data)
      .then (result => console.log(result) )
      .catch (result => console.log(result) )
</script>

在 Laravel 5.6 控制器发布操作方法的后端,我试图检查 AJAX 从前端调用发布的值。然后我将它记录到 laravel 日志文件中。

<?php

   public function myPostHandler(Request $request) {
         $data = $request->all();
        \Log::info("Posted data = " . print_r($data, true));
   }
?>

在 laravel.log 文件中...它显示值是空的,如下所示 -

[a] =>
[b] => 

所以我的问题是我应该如何将布尔数据发送到控制器,以免丢失?并且还想了解为什么 Laravel 会以这种方式行事以及为什么我的布尔值会被修剪?是中间件造成的吗?

PS:以下是我的路线,没有任何问题:

 Route::get('something/{catchall}', [
            'uses' => 'myController@index'
        ])->where('catchall', '(.*)');

 Route::post('something/{catchall}', [
            'uses' => 'myController@update'
        ])->where('catchall', '(.*)');

【问题讨论】:

  • 顺便说一句,我没有对中间件中的数据进行任何特定处理。
  • 我在过去的项目中传递了布尔值,你能告诉我你的路线吗?在到达您的控制器之前必须发生一些事情
  • 编辑了我的问题以添加路线。但路线不是问题。
  • 我通过使用 true ==> 'true' 和 false ==> 'false' 的文本值的变通方法使其工作。但我仍然不确定为什么我不能简单地将布尔值 true 或 false 发布到 laravel 控制器操作?

标签: laravel axios laravel-5.6 php-7.2


【解决方案1】:

在“myPostHandler”方法中接收到的数据是好的。 我猜 \Log::info 写布尔类型并强制转换为字符串/ 尝试在记录之前转换数据

    $data = $request->all();
    foreach($data as $key => $elem){
        if (is_bool($elem)) {
            $data[$key] = ($elem) ? 'true' : 'false';
        }
    }
    \Log::info("Posted data = " . print_r($data, true));

【讨论】:

  • 我今天会检查这个。但这似乎是正确的答案。
猜你喜欢
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多