我正在寻求一些关于我的Symfony数字输入问题的帮助,如下所述.我希望能够在我的表单中输入非常大的数字,但目前仅限于大约20亿的最大值.
我有一个名为Transaction的实体,其中一个名为"quantity"的字段已被定义为BIGINT,如下所示:
/**
* @ORM\Column(type="bigint", nullable=true)
*/
protected $quantity;
Run Code Online (Sandbox Code Playgroud)
允许我填充事务的Symfony表单使用"数字"类型:
$builder->add('quantity', 'number', array(
'label' => 'Quantity',
'grouping' => 1,
'required' => true,
));
Run Code Online (Sandbox Code Playgroud)
这一切都像一个魅力,除非数量值高于约.20亿(我还没有确切地确认这个数字).对我来说,它看起来像32位边界问题.
当发生这种情况时,它抱怨"数字解析失败".在下面的屏幕截图中我输入了30亿,它出现了这个错误:
我不相信问题是Transaction实体中的bigint,因为这是一个8字节的值,应该能够容纳64位数据.
我正在使用Symfony 2.7.16(此问题在早期版本中是相同的).任何帮助或建议最受欢迎.
谢谢!
是的,这是32位问题.你可以输入确认
php -r 'echo PHP_INT_MAX;'
2147483647
Run Code Online (Sandbox Code Playgroud)
如果您可以安装64位php build,我建议使用http://dotdeb.org,因为它们提供最新的稳定版本.
要确保您的应用程序不在32位上运行添加到 composer.json
"require": {
"php-64bit": ">=5.3.9"
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试在非64位系统上安装,则Composer将失败
你恐怕需要使用字符串.
创建自定义表单类型,将TextType值扩展并保持为字符串,但通过覆盖呈现为数字输入
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'integer';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |