我正在寻求一些关于我的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(此问题在早期版本中是相同的).任何帮助或建议最受欢迎.
谢谢!
在我的系统中,数据库时间戳记录为UTC值.
每个用户的个人资料中都记录了一个时区.登录时,时区值将从其配置文件传输到其会话($ session-> set('timezone',$ tz);).
我的大多数代码都使用Sonata INTL包,因此用户可以看到正确显示其时区的日期时间值,表单字段除外.
我最近在一些Symfony2类型上发现了model_timezone和view_timezone字段.我可以让字段显示正确的值(如下面的代码片段所示),但是我想了解如何从用户会话填充view_timezone?(我猜我可以通过某种方式传递$选项?)
事件控制器片段:
$object = <object loaded>;
$form = $this->createForm(new MyEventType(), $object);
Run Code Online (Sandbox Code Playgroud)
MyEventType表单片段:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('id', null, array(
'label' => 'Event ID',
));
$builder->add('changed', 'datetime', array(
'date_widget' => 'single_text',
'date_format' => \IntlDateFormatter::SHORT,
'time_widget' => 'single_text',
'model_timezone' => 'UTC',
'view_timezone' => 'Pacific/Auckland',
));
Run Code Online (Sandbox Code Playgroud)