->add('attendFrom', DateType::class, array(
'widget' => 'choice',
'html5' => false,
'months' => array(),
'days' => array(),
'attr' => array(
'placeholder' => 'Start year, e.g., 1980 ',
)
))
我尝试禁用日期和月份的类型。我想只展示几年。这有可能吗?
我找到了一些隐藏日期和月份的解决方案,但我想知道是否可以从FormType中禁用它。
干杯
答案 0 :(得分:4)
用户format
选项,其值为yyyy
<强>形式:强>
->add('attendFrom', DateType::class, array(
'format' => 'yyyy',
'widget' => 'choice',
'html5' => false,
'attr' => array(
'placeholder' => 'Start year, e.g., 1980 ',
)
))
<强>更新-1 强>
在树枝中隐藏月和日控制
<强> TWIG 强>:
{{
form_widget(
form.formName.attendFrom.day,
{
'attr': { 'style': 'display:none' }
}
)
form_widget(
form.formName.attendFrom.month,
{
'attr': { 'style': 'display:none' }
}
)
}}
参考:Link
答案 1 :(得分:1)
您只需使用
即可创建ChoiceType字段...
'choices' => range(date('Y') - 10, date('Y') + 10),
...
但是,如果在提交表单后需要一个DateTime对象,则应该定义自己的View Transformer。
在表单类型类中添加以下行:
public function buildForm(
FormBuilderInterface $builder,
array $options
)
{
$builder
->add(
$builder->create('attendFrom', DateType::class, [
'widget' => 'choice',
])
->addViewTransformer(new IncompleteDateTransformer())
);
}
另外,创建您自己的View Transformer:
/**
* Class IncompleteDateTransformer.
*/
class IncompleteDateTransformer implements DataTransformerInterface
{
/**
* {@inheritdoc}
*/
public function transform($value)
{
return $value;
}
/**
* {@inheritdoc}
*/
public function reverseTransform($value)
{
if (!is_array($value)) {
return $value;
}
if (empty($value['year'])) {
return $value;
}
$value['day'] = $value['day'] ?? 1;
$value['month'] = $value['month'] ?? 1;
return $value;
}
}
然后,仅渲染attendFrom.year
字段或通过form_row / form_widget函数中的attendFrom.month
参数隐藏attendFrom.day
和attr
字段。有关隐藏其他字段的信息,请参见Gopal Joshi答案。