如何在全局范围内更改symfony2表单字段的默认选项?

时间:2013-05-15 03:55:32

标签: symfony twig symfony-forms

有没有办法在symfony2中全局更改表单字段的默认选项?

更具体地说,我想将所有日期时间字段的呈现更改为使用single_text而不是默认的choice小部件。

可以吗?或者我是否需要实现自定义类型并在其中设置默认值,例如birthdate类型?

我更喜欢一个导致代码库变化最小的选项。

2 个答案:

答案 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') %} 

或类似的东西?