【问题标题】:How can I change symfony2 form fields default options globally?如何全局更改 symfony2 表单字段的默认选项?
【发布时间】:2013-05-15 03:55:32
【问题描述】:

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

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

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

我更喜欢在代码库中进行最小更改的选项。

【问题讨论】:

    标签: symfony twig symfony-forms


    【解决方案1】:

    帖子很旧,但您可以使用另一种方法,覆盖 DateType symfony 类...

    service.yml

    services:
    
        form.type.date:
            class: "YourApp\YourBundle\Form\DateType"
            tags:
                - { name: "form.type", alias: "date" }
    

    日期类型.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      
    

    【讨论】:

    【解决方案2】:

    你必须定义一个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 %}
    

    现在您已经定义了这个 sn-p 代码,您可以以这种方式将它用于您的主模板(或您在表单视图中使用的任何内容)

    {% form_theme form 'YourBundle:Form:myDataWidget' %}
    

    最后但同样重要的是,您必须将表单主题放入Resources/views 文件夹。在我的示例中,您的路径将是 Resources/views/Form/myDataWidget

    更新

    你试过了吗

    {% set type = type|default('single_text') %} 
    

    或者类似的?

    【讨论】:

    • 您能否添加一个具体示例,说明如何将日期时间字段设为单个文本?我已尝试在模板中设置小部件,但无法正常工作。 {% set widget = 'single_text' %}
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多