Symfony2表单-如何自动填充相关实体的字段?

圣狼

我正在尝试遵循http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-submitted-data上的symfony2动态表单修改教程

我的架构与他们在本教程中使用的架构有些不同。矿山包括以下关系:

国家(一对多)办公室
办公室(一对多)员工

当我编辑现有员工时,除了只在Office下拉列表中显示该国家/地区内的办公室(除非选择了另一个国家/地区,然后再使用jQuery代码)外,我希望它加载Office所在的国家/地区作为默认选项。 (不包括在内)应进行相应的更改)。

结果,但是;是“国家/地区”字段仍显示占位符值,而不是雇员办公室的正确国家/地区。(从好的方面来说,Office下拉列表仅显示该国家/地区的办公室,这意味着$ country-> getOffices()调用正在工作,因此我正在使用正确的Country对象,但似乎无法选择它默认)。

我是否遵循此处的最佳做法?我缺少什么让我不能在相关实体的表单中设置值的东西吗?

代码:

class EmployeeType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('name')
        ->add('country', EntityType::class, array(
          'class'   =>  'AppBundle:Country',
          'mapped'  =>  false,
          'placeholder' =>  '=== Select a Country ===',
        ))
    ;

    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function (FormEvent $event) {
          $form = $event->getForm();

          // This will be the Employee entity
          $data = $event->getData();

          $office = $data->getOffice();
          $country = null === $office ? array() : $office->getCountry();

          $form->get('country')->setData($country); // I think this is what's not working properly.

          $form->add('office', EntityType::class, array(
              'class'       =>  'AppBundle:Office',
              'placeholder' =>  '=== Select an Office ===',
              'choices'     =>  $country->getOffices(),
          ));
        }
    );
}
阿尔文·邦克(Alvin Bunk)

我有机会快速阅读了您参考的教程链接,并且我认为您对错误发生的位置是正确的。

我认为(但不确定),这可能会解决:

$office = $data->getOffice();
$offices = null === $office ? array() : $office->getCountry()->getOffices();

$form->add('office', EntityType::class, array(
  'class'       =>  'AppBundle:Office',
  'placeholder' =>  '=== Select an Office ===',
  'choices'     =>  $offices,
));

我仅显示您需要更改的相关部分。试试看,看看是否有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony2表单-如何自动填充相关实体的字段?

来自分类Dev

动态表单(开关实体)symfony2

来自分类Dev

Symfony2自动收集表单

来自分类Dev

Symfony2表单收集自动保留

来自分类Dev

Symfony2表单,字段不在实体中

来自分类Dev

Symfony2表单-提交时删除相关实体表单

来自分类Dev

Symfony2:如何通过某个属性过滤实体选择表单字段的选项?

来自分类Dev

在symfony2表单构建器中访问底层实体

来自分类Dev

Symfony2:表单实体group_by ManyToMany

来自分类Dev

Symfony2表单无效,但是实体还是被保存了吗?

来自分类Dev

Symfony2 OneToMany嵌入表单无法保存实体

来自分类Dev

Symfony2表单类型实体添加额外选项

来自分类Dev

Symfony2表单可快速添加新实体

来自分类Dev

Symfony2,YML文件,实体和表单中的验证

来自分类Dev

Symfony2表单无效,但是实体还是被保存了吗?

来自分类Dev

Symfony2:无法使用表单创建新实体

来自分类Dev

带有多个实体的 Symfony2 表单提交缓慢

来自分类Dev

处理Symfony2中的额外表单字段

来自分类Dev

Symfony2中的组表单字段

来自分类Dev

在Symfony2中覆盖表单字段模板

来自分类Dev

更改symfony2表单字段,但保持联系

来自分类Dev

Symfony2表单日期时间字段验证

来自分类Dev

Symfony2双嵌套动态表单字段

来自分类Dev

使用ID设置Symfony2 Entity表单字段

来自分类Dev

处理Symfony2中的额外表单字段

来自分类Dev

覆盖Symfony2中的表单字段模板

来自分类Dev

Symfony2表单未验证必填字段

来自分类Dev

如何验证Symfony2中具有集合的表单?

来自分类Dev

symfony2表单如何从角度资源接受json负载