Symfony 2 ввод даты только с помощью селектора года - PullRequest
8 голосов
/ 07 ноября 2011

Можно ли создать поле ввода даты, используя только виджет выбора года в FormBuilder в Symfony 2, или мне следует использовать поле ввода простого текстового типа?

Ответы [ 8 ]

15 голосов
/ 15 июля 2013

Вы также можете использовать:

'choices' => range(Date('Y') - 4, date('Y'))
3 голосов
/ 13 ноября 2012

Лучше использовать тип поля выбора, чем взламывать тип поля даты или просто использовать тип текстового поля.

Используя несколько основных функций даты / времени 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));
}
1 голос
/ 09 ноября 2013

Вы можете переопределить 'date_pattern':

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

ПРИМЕЧАНИЕ! Скрыть поля с display: none, не удаляйте их, чтобы пройти проверку.

1 голос
/ 03 декабря 2011

Этот подход давал мне ошибки с проверкой:

{{ 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 }}
0 голосов
/ 24 марта 2014

Проверьте этот ответ здесь: Как отобразить выпадающий месяц-год в Symfony2

Просто используйте другой блок date_widget (веточка).

0 голосов
/ 06 октября 2013

Я написал свой код таким образом, и вставка в базу данных правильна

->add('yearfield', 'datetime', array(
    'widget' => 'single_text',
    'format' => 'yyyy'
))
0 голосов
/ 16 декабря 2012

Более простой метод получения, например, пятилетнего диапазона лет с выбором типа:

    '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,
    )

Обратите внимание, что при создании возвращается строка выбранного года.

0 голосов
/ 07 ноября 2011

Вы можете использовать Настройка формы :

{% 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 %}
...