有没有办法在symfony2中全局更改表单字段的默认选项?
更具体地说,我想将所有日期时间字段的呈现更改为使用single_text
而不是默认的choice
小部件。
可以吗?或者我是否需要实现自定义类型并在其中设置默认值,例如birthdate
类型?
我更喜欢一个导致代码库变化最小的选项。
答案 0 :(得分:2)
帖子很旧,但您可以使用替代方法,覆盖DateType symfony类...
service.yml
services:
form.type.date:
class: "YourApp\YourBundle\Form\DateType"
tags:
- { name: "form.type", alias: "date" }
DateType.php
<?php
namespace YourApp\YourBundle\Form;
use Symfony\Component\Form\Extension\Core\Type\DateType as SymfonyDateType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class DateType extends SymfonyDateType
{
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
parent::configureOptions( $resolver );
$resolver->setDefault( 'widget', 'single_text' );
}
}
您可以检查服务是否由容器执行
$ ./app/console debug:container | grep form.type.date
form.type.date YourApp\YourBundle\Form\DateType
form.type.datetime Symfony\Component\Form\Extension\Core\Type\DateTimeType
答案 1 :(得分:1)
您必须定义form theme。
这非常简单,只需要一点点编码时间。首先,您必须知道要自定义的块;在这种情况下,您可以执行类似
的操作{% block my_data_widget %}
{% spaceless %}
{% if type is defined and type == 'date' %}
// do all your customization
{% else %}
// don't know ...
{% endif %}
{% endspaceless %}
{% endblock form_widget_simple %}
现在您已经定义了这段代码,您可以将它用于主模板(或者您在表单视图中使用的任何内容)
{% form_theme form 'YourBundle:Form:myDataWidget' %}
最后但同样重要的是,您必须将表单主题放入Resources/views
文件夹中。在我的示例中,您的路径为Resources/views/Form/myDataWidget
你试过
吗?{% set type = type|default('single_text') %}
或类似的东西?