php - Symfony2表单数输入超20亿

标签 php symfony

我正在就我的 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/

相关文章:

php - PHP 中的 header ('Location: <anchor>' )在 IE11 中并不总是有效

symfony - Doctrine2 的查询构建器子字符串辅助方法的正确语法

symfony - 注册成功后如何分配角色?

php - 如何解决连接问题上的 redis 错误?

php - 在包含多种货币的表中搜索

PHP重命名文件夹

php - 具有两种身份验证方法的 FOSUserBundle

Symfony2 将任何 HTML Controller 输出为 JSON

php - 如果是移动设备/平板电脑,请替换 css

php - 在 codeigniter 中单击 ajax 上的标签 a 时无法加载 Controller 功能