如何从表单类型设置实体构造函数参数?

Dav*_*les 2 symfony symfony-2.2

我需要将一个参数传递给在Form Type中使用的Entity的构造函数.

我正在setDefaultOptions方法中的Form Type中设置实体:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'MyApp\MyBundle\Entity\MyEntity'
    ));
}
Run Code Online (Sandbox Code Playgroud)

我想用这样的东西:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'MyApp\MyBundle\Entity\MyEntity',
        'my_parameter' => 'some value'
    ));
}
Run Code Online (Sandbox Code Playgroud)

这样它就会通过构造函数注入.

这可能吗?(我正在使用Symfony 2.2)

Mak*_*yar 9

我想你正在寻找这个http://symfony.com/doc/master/cookbook/form/use_empty_data.html#option-2-provide-a-closure

假设你有数据Money对象,它有两个参数金额和货币.这是这种对象的表单类型:

<?php
class MoneyType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('amount', 'number')
            ->add('currency', 'text')
        ;
    }

    /**
     * {@inheritdoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Foo\Model\Money',
            'empty_data' => function (FormInterface $form) {
                return new Money(
                    $form->getData()['amount'],
                    $form->getData()['currency']
                );
            },
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 同意,但如果没有任何"setCurrency",则抛出异常.你解决了这个案子吗? (3认同)