0

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

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

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

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

4

2 回答 2

2

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

服务.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      
于 2015-10-11T02:33:54.293 回答
1

您必须定义一个表单主题

这非常简单,只需要一点编码时间。首先,您必须知道要自定义哪个块;在这种情况下,你可以做类似的事情

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

或类似的东西?

于 2013-05-15T07:32:21.953 回答