让 empty_data 在 Symfony 2 应用程序中工作

Getting empty_data to work in a Symfony 2 application

我正在向基于 Symfony 2 和 Sonata 的项目添加字段。我正在尝试按照 this answer 的说明进行操作。在我的一个管理员 类 中,我插入了以下代码:

   $default = 'Germany';
   if (!$this->getUser()->hasRole(User::CONTENT_SUPPLIER)) {
        $formMapper
            ->tab('Distribution')
                ->with('Distribution')
                    ->add(
                        'module',
                        null,
                        [
                            'empty_data' => $default,
                        ]
                    )
                    ->add(
                        'distributions',
                        'distribution_list',
                        [
                            'label'    => false,
                            'required' => 'false',
                            'disabled' => true
                        ]
                    )
                    ->add('plannedDistributions')
                ->end()
            ->end()
        ;
    }

... 虽然我希望在我的表单中默认看到对 "Germany" 对象的引用,但我看到的是一个空字段。我应该传递一个对象而不是一个字符串吗?我正在尝试做的事情有可能吗? 我哪里做错了?

我认为您错过了有关 empty_data:

的文档中的关键部分

This option determines what value the field will return when the submitted value is empty (or missing). It does not set an initial value if none is provided when the form is rendered in a view.

This means it helps you handling form submission with blank fields.

这意味着 empty_data 将在没有默认值的情况下提交表单时用数据填充您的模型。

我不熟悉你的代码片段中使用的$formMapper,但在典型的 Symfony-Controller 中你可以像这样创建你的表单:

$form = $this->createForm(MyForm::class, $initialData);

在这种情况下,$initialData 包含一个 属性 Distribution,其值为 Germany。或者,您可以尝试在前端提供值。

设置默认数据使用选项'data'。 示例:

 //Use block
 use Symfony\Component\Form\Extension\Core\Type\TextType;
 //...
 $formMapper
     ->add('module', TextType::class,[
         'data' => 'Gearmany',
     ]);