gpt4 book ai didi

php - Symfony2表单数输入超20亿

转载 作者:可可西里 更新时间:2023-11-01 13:14:17 27 4
gpt4 key购买 nike

我正在就我的 Symfony 数字输入问题寻求一些帮助,如下所述。我希望能够在我的表单中输入非常大的数字,但目前它的最大值限制在 20 亿左右。

我有一个名为 Transaction 的实体,它有一个名为“quantity”的字段,该字段被定义为 BIGINT,如下所示:

/**
* @ORM\Column(type="bigint", nullable=true)
*/
protected $quantity;

允许我填充事务的 Symfony 表单使用“数字”类型:

    $builder->add('quantity', 'number', array(
'label' => 'Quantity',
'grouping' => 1,
'required' => true,
));

这一切都非常有效,除非数量值超过大约。 20 亿(具体数字我没有确认)。对我来说,它看起来像一个 32 位边界问题。

发生这种情况时,它会提示“数字解析失败”。在下面的屏幕截图中,我输入了 30 亿,出现了这个错误:

Example when I enter 3 billion

我不认为问题出在事务实体中的 bigint,因为这是一个 8 字节的值,应该能够容纳 64 位数据。

我使用的是 Symfony 2.7.16(这个问题在早期版本中是一样的)。欢迎任何帮助或建议。

谢谢!

最佳答案

是的,这是 32 位问题。你可以通过输入来确认

php -r 'echo PHP_INT_MAX;'
2147483647

如果你可以安装 64 位 php 构建,我建议使用 http://dotdeb.org因为他们提供最新的稳定版本。

要确保您的应用程序不在 32 位上运行,请添加到 composer.json

"require": {
"php-64bit": ">=5.3.9"
}

如果您尝试在非 64 位系统上安装,Composer 将失败

如果 64 位是不可能的

恐怕您需要使用字符串。

创建扩展 TextType 的自定义表单类型,并将值保留为字符串,但通过覆盖呈现为数字输入

/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'integer';
}

关于php - Symfony2表单数输入超20亿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com