我正在就我的 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 亿,出现了这个错误:
我不认为问题出在事务实体中的 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/