Symfony 2日期输入只有年选择器

时间:2011-11-07 10:18:32

标签: symfony formbuilder

是否可以在Symfony 2 FormBuilder中创建一个日期输入字段,只有年份选择器窗口小部件,或者我应该使用简单的文本类型输入字段?

8 个答案:

答案 0 :(得分:15)

您也可以使用:

'choices' => range(Date('Y') - 4, date('Y'))

答案 1 :(得分:3)

最好使用选择字段类型,而不是黑客攻击日期字段类型或仅使用文本字段类型。

使用几个基本的php日期/时间功能,您将获得所需。

在FormType中:

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
            ->add('yearfield', 'choice',
                    array(
                        'required' => true, 'choices' => $this->buildYearChoices()
                    ));
}

public function buildYearChoices() {
    $distance = 5;
    $yearsBefore = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y") - $distance));
    $yearsAfter = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y") + $distance));
    return array_combine(range($yearsBefore, $yearsAfter), range($yearsBefore, $yearsAfter));
}

答案 2 :(得分:1)

这种方法给我带来了验证错误:

{{ date_pattern|replace({
    '{{ year }}':  form_widget(form.year),
    '{{ month }}': '',
    '{{ day }}': '',
})|raw }}

我终于通过添加css属性来隐藏字段来解决问题:

{{ date_pattern|replace({
    '{{ year }}': form_widget(form.year),
    '{{ month }}': form_widget(form.month, { 'attr' : { 'style': 'display:none' }}), 
    '{{ day }}':  form_widget(form.day, { 'attr' : { 'style': 'display:none' }}),
})|raw }}

答案 3 :(得分:1)

您可以覆盖'date_pattern':

{{ form_row(form.fieldName, {'date_pattern': '<span style="display: none;">{{ day }}{{ month }}</span>{{ year }}'}) }}

注意!隐藏display: none字段,请勿删除它们以通过验证。

答案 4 :(得分:0)

您可以使用form customization

{% block date_widget %}
{% spaceless %}
    {% if widget == 'single_text' %}
        {{ block('field_widget') }}
    {% else %}
        <div {{ block('widget_container_attributes') }}>
            {{ date_pattern|replace({
                '{{ year }}':  form_widget(form.year),
                '{{ month }}': '',
                '{{ day }}': '',
            })|raw }}
        </div>
    {% endif %}
{% endspaceless %}
{% endblock date_widget %}

答案 5 :(得分:0)

一种更简单的方法,例如,五年的年份范围,选择类型:

    'choices' => array(
        Date('Y') => Date('Y'),
        Date('Y') - 1 => Date('Y') - 1,
        Date('Y') - 2 => Date('Y') - 2,
        Date('Y') - 3 => Date('Y') - 3,
        Date('Y') - 4 => Date('Y') - 4,
    )

请注意,is created将返回所选年份的字符串。

答案 6 :(得分:0)

在此处查看此答案:How to display a month-year dropdown in Symfony2

只需使用不同的date_widget块(twig)。

答案 7 :(得分:-2)

我用这种方式编写代码并在数据库中插入是正确的

->add('yearfield', 'datetime', array(
    'widget' => 'single_text',
    'format' => 'yyyy'
))