Как наследовать FormType в Sonata Admin?

Как наследовать FormType в Sonata Admin?

Например, в src/AppBundle/Form/CityType.php:

class SmsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('recommend', ChoiceType::class, array(
                'choices'  => array(
                    'Maybe' => 0,
                    'Yes' => 1,
                    'No' => 2,
                ),
            ))
            // ...
        ;
    }
}

src/AppBundle/Admin/CityAdmin.php:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name')
        ->name('recommend')
        // ...
    ;
}

И в моем поле администратора рекомендуется ввод текста вместо выбора.

Я могу:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name')
        ->name('recommend', ChoiceType::class, array(
            'choices'  => array(
                'Maybe' => 0,
                'Yes' => 1,
                'No' =>   2,
             )
        ))
        // ...
    ;
}

Но потом в двух местах у меня один и тот же код.

Как лучше всего рефакторить это?


person yeveb    schedule 20.10.2017    source источник


Ответы (1)


Вы можете найти ответ в документации https://symfony.com/doc/current/form/inherit_data_option.html. Все, что вам нужно сделать, это добавить свой FormType в FormMapper и установить параметр inherit_data. Имя поля не имеет значения.

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('sms', SmsType::class, array(
            'inherit_data' => true,
            'label' => false,
        ))
        // ...
    ;
}
person jag0    schedule 01.11.2017