是否可以在 Symfony 2 FormBuilder 中仅使用年份选择器小部件制作日期输入字段,还是应该使用简单的文本类型输入字段?
问问题
13573 次
8 回答
15
您还可以使用:
'choices' => range(Date('Y') - 4, date('Y'))
于 2013-07-15T09:34:02.430 回答
4
最好使用选择字段类型,而不是破解日期字段类型或仅使用文本字段类型。
使用几个基本的 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|replace({
'{{ year }}': form_widget(form.year),
'{{ month }}': '',
'{{ day }}': '',
})|raw }}
我finallay通过添加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 回答
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 回答
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 回答
0
在此处查看此答案:如何在 Symfony2 中显示月份-年份下拉列表
只需使用不同的 date_widget 块(树枝)。
于 2014-03-24T14:22:05.830 回答
-1
一种更简单的方法来获得,例如,五年的年份范围,具有选择类型:
'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,
)
请注意,创建返回所选年份的字符串。
于 2012-12-16T14:49:47.533 回答
-2
我以这种方式编写了我的代码,并且插入数据库是正确的
->add('yearfield', 'datetime', array(
'widget' => 'single_text',
'format' => 'yyyy'
))
于 2013-10-06T11:47:55.840 回答