Cesar
Cesar

Reputation: 4116

How can I change symfony2 form fields default options globally?

Is there a way to change default options for form fields globally in symfony2?

More specifically, I want to change the render of ALL datetime fields to use single_text instead of the default choice widget.

Can it be done? Or do I need to implement a custom type and set the default in there, like for example the birthdate type?

I prefer an option that leads to minimal changes in the codebase.

Upvotes: 0

Views: 733

Answers (2)

SilvioQ
SilvioQ

Reputation: 2072

The post is old, but you can use an alternative method, overriding the DateType symfony class ...

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' );
    } 
}       

You can check if the service is taken by container

$ ./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      

Upvotes: 2

DonCallisto
DonCallisto

Reputation: 29912

You have to define a form theme.

It's very easy and requires only a little bit coding time. First of all, you have to know which block to customize; in that case, you can do something like

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

Now that you have defined this snippet of code, you can use it into your main template (or whatever you use into your form views) in that way

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

Last but not least important, you have to place your form theme into Resources/views folder. In my example, your path will be Resources/views/Form/myDataWidget

Update

Did you tried with

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

or something like that?

Upvotes: 1

Related Questions