8

Symfony 2 FormBuilderの年セレクターウィジェットだけで日付入力フィールドを作成することは可能ですか、それとも単純なテキストタイプの入力フィールドを使用する必要がありますか?

4

8 に答える 8

15

以下も使用できます。

'choices' => range(Date('Y') - 4, date('Y'))
于 2013-07-15T09:34:02.430 に答える
4

日付フィールド タイプをハッキングしたり、テキスト フィールド タイプを使用したりするよりも、choice フィールド タイプを使用することをお勧めします。

PHP の基本的な日付/時刻関数をいくつか使用するだけで、必要なものが得られます。

フォームタイプ:

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));
}
于 2012-11-13T05:32:14.707 に答える
1

「date_pattern」をオーバーライドできます。

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

ノート!でフィールドを非表示にしますdisplay: none。検証に合格するためにフィールドを削除しないでください。

于 2013-11-09T13:58:22.243 に答える
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 }}
于 2011-12-03T02:30:51.157 に答える
0

こちらの回答をご覧ください: Symfony2 で月と年のドロップダウンを表示する方法

別の date_widget ブロック (小枝) を使用するだけです。

于 2014-03-24T14:22:05.830 に答える
0

フォームのカスタマイズを使用できます:

{% 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 %}
于 2011-11-07T17:27:57.913 に答える
-1

たとえば、choice type を使用して 5 年の範囲の年を取得する簡単な方法は次のとおりです。

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

creates は、選択された年の文字列を返すことに注意してください。

于 2012-12-16T14:49:47.533 に答える
-2

私はこの方法でコードを書きましたが、データベースへの挿入は正しいです

->add('yearfield', 'datetime', array(
    'widget' => 'single_text',
    'format' => 'yyyy'
))
于 2013-10-06T11:47:55.840 に答える