Laravel returns json 数据在本地和 Amazon EC2 上的不同方式
Laravel returns json data in different way on local and Amazon EC2
我们使用 Laravel 作为后端,Angular JS 作为我们的前端 REST 应用程序
我们在本地使用 Vagrant Homestead Environment
我们的在线版本使用 Amazon EC2 和 RDS。我们使用 Laravel Forge
设置了 Amazon EC2
我们面临的问题是JSON在两个环境
上的输出
本地我们得到:
{"id":234,"fname":"firstname","lname":"lastname"}
其中 234 是整数
在亚马逊 EC2
{"id":"234","fname":"firstname","lname":"lastname"}
其中 234 作为字符串出现
我的问题是应该做哪些更改才能使 Amazon EC2 的输出整数?
使用选项 JSON_NUMERIC_CHECK
它将起作用:
json_encode($data, JSON_NUMERIC_CHECK);
以下是您可以对源代码执行的一些操作:
1。到处使用 JSON_NUMERIC_CHECK
虽然不是很漂亮...
2。写一个默认有这个选项的包装函数
to_json($data, $options = JSON_NUMERIC_CHECK){
return json_encode($data, $options);
}
然后搜索将所有 json_encode
替换为 to_json
3。仅使用 ->toJson
个模型和集合
编写您自己的基础模型和基础集合,使用您想要的默认值实现 toJson()
方法:
public function toJson($options = JSON_NUMERIC_CHECK){
return parent::toJson($options);
}
4。自己写 response macro
Response::macro('numjson', function($value)
{
return Response::json($value, 200, array(), JSON_NUMERIC_CHECK);
});
用法:
return Response::numjson($data);
我知道您已经实施了公认的答案,但我相信实际的潜在问题可能与您的 EC2 实例上使用的 mysql 驱动程序有关。
如果您使用的是 php5-mysqld
驱动程序,那么数据库中的整数字段将被 return 编辑为字符串。但是,如果您使用 php5-mysqlnd
驱动程序,数据库中的整数字段将被 return 编辑为整数。
Homestead 使用 php5-mysqlnd
驱动程序,因此它可以 return 整数。我不知道 Forge 如何配置您的 EC2 实例,但如果它没有使用 php5-mysqlnd
驱动程序,这可以解释您的问题。在您的 EC2 实例上,运行 php -i | grep mysqlnd
。如果您没有显示 mysqlnd => enabled
的行,这就是您的问题。
您应该能够使用以下命令安装本机驱动程序(假设 ubuntu):
sudo apt-get install php5-mysqlnd
sudo service apache2 restart
我们使用 Laravel 作为后端,Angular JS 作为我们的前端 REST 应用程序
我们在本地使用 Vagrant Homestead Environment 我们的在线版本使用 Amazon EC2 和 RDS。我们使用 Laravel Forge
设置了 Amazon EC2我们面临的问题是JSON在两个环境
上的输出本地我们得到:
{"id":234,"fname":"firstname","lname":"lastname"}
其中 234 是整数 在亚马逊 EC2
{"id":"234","fname":"firstname","lname":"lastname"}
其中 234 作为字符串出现
我的问题是应该做哪些更改才能使 Amazon EC2 的输出整数?
使用选项 JSON_NUMERIC_CHECK
它将起作用:
json_encode($data, JSON_NUMERIC_CHECK);
以下是您可以对源代码执行的一些操作:
1。到处使用 JSON_NUMERIC_CHECK
虽然不是很漂亮...
2。写一个默认有这个选项的包装函数
to_json($data, $options = JSON_NUMERIC_CHECK){
return json_encode($data, $options);
}
然后搜索将所有 json_encode
替换为 to_json
3。仅使用 ->toJson
个模型和集合
编写您自己的基础模型和基础集合,使用您想要的默认值实现 toJson()
方法:
public function toJson($options = JSON_NUMERIC_CHECK){
return parent::toJson($options);
}
4。自己写 response macro
Response::macro('numjson', function($value)
{
return Response::json($value, 200, array(), JSON_NUMERIC_CHECK);
});
用法:
return Response::numjson($data);
我知道您已经实施了公认的答案,但我相信实际的潜在问题可能与您的 EC2 实例上使用的 mysql 驱动程序有关。
如果您使用的是 php5-mysqld
驱动程序,那么数据库中的整数字段将被 return 编辑为字符串。但是,如果您使用 php5-mysqlnd
驱动程序,数据库中的整数字段将被 return 编辑为整数。
Homestead 使用 php5-mysqlnd
驱动程序,因此它可以 return 整数。我不知道 Forge 如何配置您的 EC2 实例,但如果它没有使用 php5-mysqlnd
驱动程序,这可以解释您的问题。在您的 EC2 实例上,运行 php -i | grep mysqlnd
。如果您没有显示 mysqlnd => enabled
的行,这就是您的问题。
您应该能够使用以下命令安装本机驱动程序(假设 ubuntu):
sudo apt-get install php5-mysqlnd
sudo service apache2 restart