Symfony 2仅带年份选择器的日期输入
是否可以在Symfony 2 FormBuilder中仅使用年份选择器小部件创建日期输入字段,还是应该使用简单的文本类型输入字段?您可以使用:Symfony 2仅带年份选择器的日期输入,symfony,formbuilder,Symfony,Formbuilder,是否可以在Symfony 2 FormBuilder中仅使用年份选择器小部件创建日期输入字段,还是应该使用简单的文本类型输入字段?您可以使用: {%block date\u widget%} {%spaceless%} {%if widget=='single_text%} {{block('field_widget')} {%else%} {{日期|模式|替换({ “{{year}}”:form_小部件(form.year), “{{month}}”:”, “{day}}”:”, })|原始}
{%block date\u widget%}
{%spaceless%}
{%if widget=='single_text%}
{{block('field_widget')}
{%else%}
{{日期|模式|替换({
“{{year}}”:form_小部件(form.year),
“{{month}}”:”,
“{day}}”:”,
})|原始}}
{%endif%}
{%endspaceless%}
{%endblock日期\小部件%}
这种方法给了我验证错误:
{{ 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 }}
最好使用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));
}
一种更简单的方法,例如,通过选择类型获得五年的时间范围:
'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将返回所选年份的字符串。您还可以使用:
'choices' => range(Date('Y') - 4, date('Y'))
我以这种方式编写了代码,并且在数据库中插入是正确的
->add('yearfield', 'datetime', array(
'widget' => 'single_text',
'format' => 'yyyy'
))
您可以覆盖“日期模式”:
{{ form_row(form.fieldName, {'date_pattern': '<span style="display: none;">{{ day }}{{ month }}</span>{{ year }}'}) }}
{form_行(form.fieldName,{'date_pattern':{{{day}}{{month}}{{year}}}}}}
注意用
显示隐藏字段:无
,不要删除它们以通过验证。在此处查看此答案:
只需使用不同的date_widget block(twig)。这是一个解决问题的小技巧,但没有回答问题——如何使用FormBuilder实现这一点?我想做完全相同的事情。你能解释一下你是怎么做的吗?我有一个错误:
Twig\u error\u运行时:变量“date\u widget”不存在
你救了我一天!谢谢(为什么要修复它?)ps。最好的答案是
{{ form_row(form.fieldName, {'date_pattern': '<span style="display: none;">{{ day }}{{ month }}</span>{{ year }}'}) }}