【发布时间】:2013-05-15 03:55:32
【问题描述】:
有没有办法在 symfony2 中全局更改表单字段的默认选项?
更具体地说,我想将 ALL 日期时间字段的呈现更改为使用 single_text 而不是默认的 choice 小部件。
可以吗?还是我需要实现自定义类型并在其中设置默认值,例如 birthdate 类型?
我更喜欢在代码库中进行最小更改的选项。
【问题讨论】:
标签: symfony twig symfony-forms
有没有办法在 symfony2 中全局更改表单字段的默认选项?
更具体地说,我想将 ALL 日期时间字段的呈现更改为使用 single_text 而不是默认的 choice 小部件。
可以吗?还是我需要实现自定义类型并在其中设置默认值,例如 birthdate 类型?
我更喜欢在代码库中进行最小更改的选项。
【问题讨论】:
标签: symfony twig symfony-forms
帖子很旧,但您可以使用另一种方法,覆盖 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
【讨论】:
你必须定义一个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' %}