有没有办法在 symfony2 中全局更改表单字段的默认选项?
更具体地说,我想更改所有日期时间字段的渲染以使用single_text
而不是默认choice
小部件。
可以做到吗?还是我需要实现自定义类型并在其中设置默认值,例如birthdate
类型?
我更喜欢导致代码库变化最小的选项。
有没有办法在 symfony2 中全局更改表单字段的默认选项?
更具体地说,我想更改所有日期时间字段的渲染以使用single_text
而不是默认choice
小部件。
可以做到吗?还是我需要实现自定义类型并在其中设置默认值,例如birthdate
类型?
我更喜欢导致代码库变化最小的选项。
帖子很旧,但您可以使用另一种方法,覆盖 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
您必须定义一个表单主题。
这非常简单,只需要一点编码时间。首先,您必须知道要自定义哪个块;在这种情况下,你可以做类似的事情
{% 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') %}
或类似的东西?