如何在Symfony2中使用表单获取输入类型为数字的值?

6
这是我的表单生成器代码。
public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('phoneAlternative', 'number',array('max_length'=>15));
    $builder->add('emailPersonal', 'email');
    $builder->add('addressCurrent', 'textarea');
}

这是 HTML 标记。
<input id="employee_phoneAlternative" type="text" maxlength="15" required="required" name="employee[phoneAlternative]" class="valid">

有人能给我建议吗?为什么我在构建表单时将输入类型设置为数字,但实际上显示的是“文本”?我该如何使用Symfony2表单生成器获取输入类型为“数字”?
3个回答

21

你需要使用表单类型'integer',而不是'number'。

'number'表单类型应该用于浮点数,需要使用text输入框。

因此,在您的情况下,正确的代码行应该是:

$builder->add('phoneAlternative', 'integer', array('max_length'=>15));

3
此外:对于电话号码来说,numberinteger都不实用,因为用户习惯填写格式化的电话号码,例如+49 (30) 123 456。请注意,翻译后的内容在语言表达上更符合中文习惯,但未改变原有含义。 - KingCrunch
1
你可以使用正则表达式约束来匹配电话号码。 - M Gholami
1
作为一条注释,最新的Symfony版本要求将“integer”写成:Symfony\Component\Form\Extension\Core\Type\IntegerType::class。 - Samuel Vicent
1
请注意,您的电话号码将被转换为整数,因此 0123 将变成 123 - Guillaume Renoult

2
你可以通过覆盖表单主题模板(http://symfony.com/doc/current/book/forms.html,'Form theming' 部分)来完成此操作。 在你的示例中,需要创建的块是 'number_widget':
{% block number_widget %}
{% spaceless %}
    {% set type = type|default('number') %}
    {{ block('input') }}
{% endspaceless %}
{% endblock number_widget %}

1
你必须这样做。
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('phoneAlternative', 'integer',array('max_length'=>15));
$builder->add('emailPersonal', 'email');
$builder->add('addressCurrent', 'textarea');
}

或者您可以使用 input 在 html.twig 中创建表单。
 phoneAlternative:   <input type="Number" required> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接